马上给分:如果在VC中调用Delphi编的DLL? 1、如果在VC中调用Delphi编的DLL?2、需要什么(dll,lib,函数类型,参数……),不用lib行吗?怎么做? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 参考:http://www.vckbase.com/document/viewdoc/?id=1116 创建“通用的”动态链接库(DLL)http://www.vckbase.com/document/viewdoc/?id=580 一个例子:///////////调用dll,函数原型是function FuncRunDll(IntMainPrgHdl:integer;PchrMainWorkPath,PChrUserCode:Pchar): integer; stdcall;//begintypedef int (WINAPI * NETDLL)(int,char*,char*);HINSTANCE hmod;hmod = ::LoadLibrary("NetManager.dll");if(hmod != NULL){ strcpy(szWorkDir,(LPSTR)(LPCTSTR)GetRootDir()); NETDLL lpproc; lpproc = (NETDLL)GetProcAddress (hmod,"FuncRunDll"); int n = *(int*)&this->m_hWnd; lpproc(n,szWorkDir,m_szNSR); FreeLibrary(hmod);}else AfxMessageBox("加载NetManager.dll失败!"); VC调用Delphi的DLLDelphi中的声名格式: Function ShowDialog( hMainWnd:THandle; Msg:PChar ):integer; stdcall;输出到Dll文件中时,名称不分裂。VC中的调用格式: extern "C" __declspec(dllimport) int __stdcall ShowDialog( HWND hwnd,char* Msg );.如带有__stdcall,则要求Lib文件中对应函数名称分裂,可有以下步骤生成Lib文件:.用Impdef.exe生成def文件,格式为:Impdef def文件名 dll文件名.手工调制def文件参数,如ShowDialog改为ShowDialog@8.用Lib.exe生成lib文件,格式为:Lib /def:def文件名.如声名中无__stdcall,默认调用格式仍为stdcall,但不要求名称分裂,用以下批处理文件MkLib.bat可生成Lib文件:@echo offif %1.==. goto errorimpdef %1.def %1.dlllib /def:%1.defgoto end:errorecho Usage: MkLib DllNameecho Note: Don't add extension ".dll" to parameter "DllName":end lib 生成秘方。如果是有头文件,有dll、无lib的情况,最方便的方法,是用头文件,自己写一个函数体都为空的等效输出的vc dll工程,编译一下,不就有了lib文件吗。想要什么样的,就有什么样的。这个方法可就不需要什么第三方工具了。比较简单。 1、如果在VC中调用Delphi编的DLL?2、需要什么(dll,lib,函数类型,参数……),不用lib行吗?怎么做?就需要DLL 当然函数原型是要知道的 即可.直接 ::LoadLibrary / ::GetProcAddress即可 同意crystal521(水晶泪)的做法。同时,如果别人的dll导出函数使用extern "C" __declspec(dllimport)而非_stdcall方式,那么你在VC中调用Delphi或者在Delphi中调用VC的dll几乎可以肯定的说不能成功,这时候你如果已知函数的原型,你需要使用与原来编写dll一样的语言自己再封装一层dll,把所有的接口都修改为_stdcall的方式,再来调用这个新的dll。 如果没有lib文件,你只能使用LoadLibrary("aaa.dll");的方式来进行调用了。 如何让外网服务器发的信息,内网私有地址的主机能接收到? 给其它程序列表框插入数据出现的问题...... dll在英文操作系统下无法调用,有这方面经验的请进 调用zip32j.dll压缩文件 一个有趣的比赛 不使用MFC, 怎样做出一个类似NOTEPAD的文本编辑程序? 哪有工控的图标啊? 抢答:如何实现excel文件导入access数据库?分数多多,可另开贴结分 请问在对话框中怎样设置TAB键按多次时,光标的跳跃顺序? 请教 SQL数据库怎样才能得到字段的数据类型 关于CSOCKET问题的求教 [请教]如何在应用程序中替换类?
http://www.vckbase.com/document/viewdoc/?id=1116
///////////调用dll,函数原型是function FuncRunDll(IntMainPrgHdl:integer;PchrMainWorkPath,PChrUserCode:Pchar): integer; stdcall;//begin
typedef int (WINAPI * NETDLL)(int,char*,char*);
HINSTANCE hmod;
hmod = ::LoadLibrary("NetManager.dll");
if(hmod != NULL)
{
strcpy(szWorkDir,(LPSTR)(LPCTSTR)GetRootDir());
NETDLL lpproc;
lpproc = (NETDLL)GetProcAddress (hmod,"FuncRunDll");
int n = *(int*)&this->m_hWnd;
lpproc(n,szWorkDir,m_szNSR);
FreeLibrary(hmod);
}
else
AfxMessageBox("加载NetManager.dll失败!");
Function ShowDialog( hMainWnd:THandle; Msg:PChar ):integer; stdcall;输出到Dll文件中时,名称不分裂。VC中的调用格式:
extern "C" __declspec(dllimport) int __stdcall ShowDialog( HWND hwnd,char* Msg );.如带有__stdcall,则要求Lib文件中对应函数名称分裂,可有以下步骤生成Lib文件:.用Impdef.exe生成def文件,格式为:Impdef def文件名 dll文件名.手工调制def文件参数,如ShowDialog改为ShowDialog@8.用Lib.exe生成lib文件,格式为:Lib /def:def文件名.如声名中无__stdcall,默认调用格式仍为stdcall,但不要求名称分裂,用以下批处理文件MkLib.bat可生成Lib文件:@echo offif %1.==. goto errorimpdef %1.def %1.dlllib /def:%1.defgoto end:errorecho Usage: MkLib DllNameecho Note: Don't add extension ".dll" to parameter "DllName":end
2、需要什么(dll,lib,函数类型,参数……),不用lib行吗?怎么做?就需要DLL 当然函数原型是要知道的 即可.
直接 ::LoadLibrary / ::GetProcAddress即可
同时,如果别人的dll导出函数使用extern "C" __declspec(dllimport)而非_stdcall方式,那么你在VC中调用Delphi或者在Delphi中调用VC的dll几乎可以肯定的说不能成功,这时候你如果已知函数的原型,你需要使用与原来编写dll一样的语言自己再封装一层dll,把所有的接口都修改为_stdcall的方式,再来调用这个新的dll。
LoadLibrary("aaa.dll");
的方式来进行调用了。