如何在VC中调用Delphi写的dll?

zjl3638656 2007-04-10 11:22:11
两中方法:
1.动态调用(50)
a.无参数无返回值
b.无参数有返回值
c.有参数有返回值
2.使用lib和头文件来调用(50)
给出用dll产生lib的工具
给出头文件中函数申明的格式(记的是VC调用Delphi写的dll哦)

今天登陆的验证码是:88888.幸运~~~~~
请大家发言,只要验证成功就会给分~
...全文
438 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
出错位置报什么错误?
是函数调用错误,还是非法操作.
zjl3638656 2007-04-10
  • 打赏
  • 举报
回复
顶上去,在线等呢,不过等下要去吃饭了
zjl3638656 2007-04-10
  • 打赏
  • 举报
回复
function VodInitCard : integer; stdcall;
是stdcall的吧,严格按照动态调用方法调用,还是出错
HINSTANCE dll;
int return_value;

typedef int(__stdcall *dll_fun)();
dll = ::LoadLibrary("MultVod.dll");
if(dll==NULL)
{
AfxMessageBox("Can't find dllFile");
return 0;
}
dll_fun proc = (dll_fun)GetProcAddress(dll,"VodInitCard");

if (proc = NULL)
{
AfxMessageBox("can't find function:VodInitCard");
return 0;
}
else
{
return_value = proc();//出错位置,前面都正确
return return_value;
}
有错误请指出,谢谢
  • 打赏
  • 举报
回复
需要注意的是 函数调用方式 stdcall或者cdecl
参数个数和类型是调用成功的关键
所以必须只要原来函数在pascal中的声明.
静态调用就是调用api是一样的,包含头文件,和相应的lib.
zjl3638656 2007-04-10
  • 打赏
  • 举报
回复
恩,谢谢,楼上的回答,我也查了一些资料的,结果用动态调用的时候出现错误,有个初始化函数,有返回值没有参数的,按照动态调用的方法总是出现错误,静态调用的详细方法给个,或者给个地址我去看,谢了
ouyh12345 2007-04-10
  • 打赏
  • 举报
回复
调用delphi写的dll,注意的就是参数的类型
  • 打赏
  • 举报
回复
动态调用容易
不过你得知道 函数在vc中相应的声明方式
简单的例子
typedef int (PASCAL *TYPE_MYFUN)(HWND,LPCTSTR,LPCTSTR,UINT);
TYPE_MYFUN MyFun;
HMODULE hUserDll=LoadLibrary("user32.dll");
MyFun=(TYPE_MYFUN)GetProcAddress(hUserDll,"MessageBoxA");
MyFun(0,"asdasd","aaa",0);

静态调用也容易
自己建立一个dll工程,按着导出函数的顺序依次添加函数,用def文件限定导出名字.
然后用这个dll工程生成的lib库 去做静态链接用.
不过同样得知道函数在vc中相应的声明方式
ps用工具声明的lib库似乎无法保证没有问题
CathySun118 2007-04-10
  • 打赏
  • 举报
回复
类型不一致吧

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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