混合语言编程[求助]

八卦之魂 2007-07-05 04:11:07
有套 delphi 代码包含了好几个类(包括文件操作,多线程,socket通信等功能),全部被我封装到了一个DLL里面并提供了相应的导出函数。

DLL里面包含了两个全局变量(一个是delphi本身的VCL类,一个是我封装进DLL的类),使用 create(delphi的构造函数) 和 free (delphi调用析构函数)进行处理的.

现在的问题是,我用 delphi 调用这个 DLL 的时候,一切正常;
如果用VC调用这个 DLL,执行 freelibrary 的时候报错,出现类似 ("0X00fe8559"指令引用的"0x0122638d"内存。该内存不能为"read") 的字样; 如果用 C# 调用这个DLL,在执行 dllimport 时,VS就死掉了(我不会C#,这是朋友帮忙测试的)


我想请问一下这种情况是什么原因引起的,有没有办法解决?
...全文
223 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
iBuilder 2007-07-06
  • 打赏
  • 举报
回复
一般不能传递类指针,只能传递函数指针,要操作窗口,就传窗口句柄等。
oyljerry 2007-07-06
  • 打赏
  • 举报
回复
不同语言之间DLL要用windows DLL,还有注意各种数据类型等之间的转换
八卦之魂 2007-07-06
  • 打赏
  • 举报
回复
我是楼主



忘记说明原来的 delphi 中包含了很多公共变量和一些类(都对内存进行读写的)
我只是把这套代码全部封进一个DLL中
用 delphi 调用 DLL 完全正常,换成其他语言,加载卸载DLL就有纰漏了
我想问问是不是因为DLL中包含了很多公共变量和类的缘故?导致无法在不同的开发语言中调用?
iBuilder 2007-07-05
  • 打赏
  • 举报
回复
首先正常来 混合编程 你不能用 VC 来调用 VCL 类的,只能像yjgx007所说的 用标准extern "C"方式导出, 并保持参数栈顺序一致,即_stdcall, _cdcel, or _fastcall 而且一般只是调用 一般的函数,至于“在VC中,光是执行下面两句都会报错误
loadlibrary
freelibrary
” 那要就是另外的原因了,没有代码出来,很难找出问题
八卦之魂 2007-07-05
  • 打赏
  • 举报
回复
我是楼主






我没有调用 DLL 中的函数
在VC中,光是执行下面两句都会报错误
loadlibrary
freelibrary
lailuboy 2007-07-05
  • 打赏
  • 举报
回复
对,注意统一调用规则
yjgx007 2007-07-05
  • 打赏
  • 举报
回复
用标准extern "C"方式导出, 并保持参数栈顺序一致,即_stdcall, _cdcel, or _fastcall

15,471

社区成员

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

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