用VC++编写的DLL文件在DELPHI是否都能够调用?

zfbing7640 2003-09-24 05:25:26
用VC++编写的DLL文件在DELPHI是否都能够调用?
...全文
97 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mydelphiworld 2003-09-27
  • 打赏
  • 举报
回复
可以的,
我都知道怎样做
不好意思, 借你的地方用一下,delphi高手们,你们好!我是一位delphi初学者, 希望各位指点小弟一下,
小弟在此谢过啦,
小弟的邮箱是: liu-jin-fu@sohu.com
甜而不腻 2003-09-27
  • 打赏
  • 举报
回复
调用DLL注意以下几个问题:
1、调用方式,
2、参数类型,
Seahilly 2003-09-27
  • 打赏
  • 举报
回复
对不起,有一个错误:
initialization //初始化处理
LoadDLL; //不是LoadSmooths;
Seahilly 2003-09-25
  • 打赏
  • 举报
回复
以下给你一个例子,你可以借鉴以下,这是从一个已经完全调通的程序在录下来的。

希望对你有帮助。

-----------------------------------------------------------------------------

VC++的定义:

// MYProcess.cpp: 一定是 .CPP文件!!

#include "stdafx.h"
#include "myProcess.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

extern "C" __declspec(dllexport) DWORD CDWORDProcess()
{
return .......;
}


extern "C" __declspec(dllexport) BOOL CBOOLProcess()
{
CASmoothProcess* pASmoothProcess = new CASmoothProcess;
return ......;
}

extern "C" __declspec(dllexport) void CvoidProcess()
{
return;
}

以下是Delphi的引入单元:
unit MYUnit;

{$ALIGN ON}
{$MINENUMSIZE 1}

interface

Uses Windows,SysUtils;

Type TCDWORDProcess=Function(...) Dword; Cdecl; //注意与VC++中对应函数的参数说明一致
TCBOOLProcess=Function(...) Bool;Cdecl; //注意参数次序、类型对应
TCvoidProcess=Procedure(...);Cdecl; //对应“过程”

implementation

Var CDWORDProcess: TCDWORDProcess;
CBOOLProcess: TCBOOLProcess;
CvoidProcess: TCvoidProcess;

Var DLL_Handle: THandle;

Function LoadDLL: Bool; //动态连接库加载
Var Loadok: Bool; //动态连接库加载路径
SysDLLPath: String;
Begin
Loadok:=True;
LoadDLLsOk:=False;
SysDLLPath:=.... //DLL所在的目录;
DLL_Handle:=LoadLibrary(PChar(SysDLLPath)); //安给定的路径加载
If DLL_Handle>0 Then //若加载成功,
Begin //则依次定位三个函数
Try
LoadDLLsOk:=True;
@CDWORDProcess:=GetProcAddress(DLL_Handle,'CDWORDProcess');//致意注意大小写!
@CBOOLProcess:=GetProcAddress(DLL_Handle,'CBOOLProcess');
@CvoidProcess:=GetProcAddress(DLL_Handle,'CvoidProcess');
Except
FreeLibrary(DLL_Handle);
Loadok:=False;
End
End
Else
Loadok:=False;
Result:=Loadok;
End;

initialization //初始化处理
LoadSmooths;
finalization
If DLL_Handle>0 Then //退出处理
FreeLibrary(DLL_Handle);

end.
-----------------------------------------------------------------
Seahilly 2003-09-24
  • 打赏
  • 举报
回复
一般都能够调用,但是要注意:
1、VC++的函数名是大小写敏感的,在Delphi引入时要注意;
2、调用方式,VC++自己缺省为C方式,对应Delphi的“Cdel”,最好都用StdCall;
3、参数对应关系,如*对应指针,&对应Var等。
4、如果VC++输出的是个类,则Delphi也能够调用,可以采用包装法,但是,最好采用虚拟表法。
5、我曾回答FigoZhu(朱德飞)的一个问题“Delphi可以使用VC做的DLL还原的LIB吗?”讲过类似问题,你可以去看一看。(2003-9-8 21:27:20发布,已结贴)。
JYCY 2003-09-24
  • 打赏
  • 举报
回复
绝对能.

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧