我由于某些原因需要写一个DLL 给用VB的人具体函数原型是这样的(很简单):
function F1(var EnString,sreturn:pchar):pchar;
begin
result := EnString;
end;exports
F1 ;在该项目编译后用delphi 调用返回正常,但如果用VB调用的话返回不正常,具体问题在于 delphi 跟 vb的数据类型是不同的,但我应该如果解决呢??LPCTSTR 我也用过 但是 还是不行 vb 那边的调用语句是这样的 Private Declare Function F1 Lib "CODED.dll" (ByVal EnString
As String, ByVal sreturn As String) As String
function F1(var EnString,sreturn:pchar):pchar;
begin
result := EnString;
end;exports
F1 ;在该项目编译后用delphi 调用返回正常,但如果用VB调用的话返回不正常,具体问题在于 delphi 跟 vb的数据类型是不同的,但我应该如果解决呢??LPCTSTR 我也用过 但是 还是不行 vb 那边的调用语句是这样的 Private Declare Function F1 Lib "CODED.dll" (ByVal EnString
As String, ByVal sreturn As String) As String
解决方案 »
- DELPHI网页怎么选择这个列表框
- DataSource +ADOQeury+DBGrid显示数据问题!
- 如何监听局域网中电脑是否连接到服务器?
- 关于delphi5中NMSMTP发送邮件(带验证)的解决方法(分享给大家)
- insert(combobox1.text,#13,10)为什么不对?
- 请问各位大侠:过程内怎样声明过程阿?
- adoquery分页的问题
- 谁告诉我一下,急
- 问一下,指针到底有什么用?链表到底是干什么用的,请说的实际一些?
- 我如何实现远程控制数据库?用怎么控件?
- 可以不用buf做中介,就把数据从一个MemoryStream复制到另一个MemoryStream吗?
- 谁能帮我解释一下什么叫三层数据结构
2. 要有统一的调用约定(VB只支持STDCALL)你的Delphi中声明的是var类型的参数,VB中应该使用ByRef而不是ByVal
兄弟,先谢谢你的回答,而且非常实际!不过请恕在下愚昧,我对你的第一点不是太明白你提到:
1. 跨语言的库,函数返回值类型切记使用字符串请问你所指的“字符串” 是pchar 吗,还是有其他?? 难到是String? 可是String是Borland的数据类型如果用了String 要加Borlandmm.dll的 你的意思是............
实际上VB的String和Delphi的String兼容(仅限于读取数据,写入数据没做过测试,手上没VB);如果你在Delphi的DLL中用了String类型,可以不用Borlandmm.dll,除非你有意要在CB或者Delphi之间使用那些使用了String的函数。如果你要加分,不要加到我这个ID上,加到lexchow,我正努力想让那个ID达到1000分专家分,那样我可以把那上面的7000多份可用分转过来了