zoukankan      html  css  js  c++  java
  • VC 编写 stdcall 方式的DLL

    VC工具:VS2005

    DELPHI 工具: DELPHI 7

     VS2005 新建DLL

    新建-项目 保存时选择 DLL

    代码

    // testdll.cpp : 定义 DLL 应用程序的入口点。
    //

    #include "stdafx.h"

      

    #ifdef _MANAGED
    #pragma managed(push, off)
    #endif

    BOOL APIENTRY DllMain( HMODULE hModule,
                           DWORD  ul_reason_for_call,
                           LPVOID lpReserved
          )
    {
        return TRUE;
    }


     HRESULT __stdcall  TestAdd(int i, int j)
    {
     return i + j;
    }

    #ifdef _MANAGED
    #pragma managed(pop)
    #endif

    代码很简单,就一个 TestAdd

    注意 不能使用VC的 extern"C" __declspec( dllexport ) HRESULT __stdcall  TestAdd(int i, int j)

    下一步,新建一个def文件(使用记事本新建,保存为def),VC默认为MFC的DLL带DEF的,其他的不带。

    DEF代码:

    LIBRARY      "testdll" 

    EXPORTS
        TestAdd   @1

    然后将def加入VS2005,VC6工程中,只要有DEF文件并将其添加到工程中,VC6就可以自动地生成DLL与其相应的Lib文件了。

    但是VS2005不一样,需要指定DEF文件

    工程 > 属性中的链接器,然后找到"输入"这一项. 在 "模块定义文件" 中输入 testdll.def.

    然后编译

    DELPHI 调用

     TestAddFun = function (I: Integer; j: Integer): HRESULT; stdcall;

    var
      TestFun: TestAddFun;

      H: HMODULE;
    begin

      H := LoadLibrary('testdll.dll');
      if H <> 0 then
        TestFun := GetProcAddress(H, 'TestAdd');

      if Assigned(@TestFun) then
        ShowMessage(IntToStr(TestFun(1, 20)));

      FreeLibrary(H);

    至此,调用成功

  • 相关阅读:
    正则表达式
    运算符重载 hash原理 Equals方法
    接口 类型转换 try-catch(学习笔记)
    综合练习:词频统计
    组合数据类型综合练习
    Python基础综合练习
    熟悉常用的Linux操作
    大数据概述
    递归下降分析法
    有穷状态自动机
  • 原文地址:https://www.cnblogs.com/chengxin1982/p/1640052.html
Copyright © 2011-2022 走看看