看流星社区

 找回密码
 注册账号
查看: 2075|回复: 0

VC 编写 stdcall 方式的DLL

[复制链接]

该用户从未签到

发表于 2013-5-11 09:31:14 | 显示全部楼层 |阅读模式
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);

至此,调用成功
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-5-14 11:47

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表