VC 编写 stdcall 方式的DLL

来源:互联网 发布:talkback是什么软件 编辑:程序博客网 时间:2024/05/01 16:47

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);

至此,调用成功

原创粉丝点击