关于Delphi7 调用C++ dll 传参问题。

spade24 2011-08-10 02:24:52
C++ DLL h文件:

extern "C" __declspec(dllexport) unsigned int __stdcall WINAPI GetA(float *fData,int iNum1,int iNum2);



Delphi7 加载DLL:

function F_GetA(fData:Array of Single;iNum1,iNum2:Integer):Cardinal;stdcall;external 'MyDLL.dll' name GetA;




var
fData:Array[0..3000] of Single;//输出的浮点型数组
iNum1:Integer;//输入的数据
iNum2:Integer;//输入的数据

iNum1:=10;
iNum2:=20;
if(F_GetA(fData,iNum1,iNum2)=0) then
ShowMessage('失败。')
else
ShowMessage('成功。');


结果:
通过调试发现,在调用F_GetA过程中,
1、iNum1=3000(随fData长度变化);
2、iNum2=10(随iNum1设置变化);

初次使用delphi7,这样的结果,不知所云的#¥@%
...全文
63 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
spade24 2011-08-10
  • 打赏
  • 举报
回复
补充:C++的DLL应该不会有问题,在VB、C#调用都没出现过问题。

现在的结果就是,DLL中即使没有做任何处理,“fData:Array[0..3000] of Single”内的长度发生改变,比如设成[0..2048],那么iNum1也就等于2048了;而同理,iNum2又随iNum1的设置变化。
spade24 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]
c++中实现了什么代码
[/Quote]

因为DLL也是我自己写的,所以,我通过在DLL最开头位置写AfxMessageBox得到iNum1和iNum2结果。
也就是说我没经过任何处理,直接在dll中取出iNum1和iNum2两个数据就是不对的了。
bdmh 2011-08-10
  • 打赏
  • 举报
回复
c++中实现了什么代码

1,978

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 其他语言讨论
社区管理员
  • 其他语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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