问一个C++调用delphi编写的dll的问题。麻烦有空的看看。

JCFish 2017-02-13 08:32:12
delphi写了个dll其中一个方法:

function CAM_GrabImage(var devId:WideString;out imageData:Pointer;out imageSize:Int64; out imageWidth:Integer; out imageHeight:Integer) : integer ; cdecl ;

用delphi编写的程序调用的时候 imageData 正常返回了指针。


用C++调用的时候 imageData地址变成了null。其他参数都正常返回。


有人遇到并解决过类似情况吗?


下面是C调用部分代码,没有异常。就是imageData在debug时候看是null。传进去的时候还有初始地址,运行结束后变null。
typedef __cdecl int(*Dllfun)(char* devId, char* imageData,long* imageSize,int* imageWidth, int* imageHeight);
result = CAM_GrabImage(devId,imageData,imageSize,imageWidth,imageHeight);

delphi中
imageData:Pointer 我试过PChar
C中
Char* void*都试过。
结果一样,都是delphi编写的代码调用dll正常返回,C调用同一个dll,不正常。


请不吝赐教,感谢。
...全文
1618 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
bwsoft1 2017-09-15
  • 打赏
  • 举报
回复
写这dll的技术不过关呀,给delphi,cbc调用,string,widestring还可以用,要通用,最好pchar,pwidechar,不在dll里改,你是很难用好的
lvjun 2017-09-12
  • 打赏
  • 举报
回复
关于DLL的调用 ,,,尤其是指针数据,主要问题是空间分配的问题。你imagedata的数据空间,是在delphi中getmem分配出来的么?另外你这种调用方法,,分配出来的imagedata数据区,要保证是长期存在的,不能删除。
zhujinqiang 2017-06-02
  • 打赏
  • 举报
回复
引用 3 楼 DelphiGuy 的回复:
function CAM_GrabImage(var devId:WideString;out imageData:Pointer;out imageSize:Int64; out imageWidth:Integer; out imageHeight:Integer) : integer ; cdecl ; 和 typedef __cdecl int(*Dllfun)(char* devId, char* imageData,long* imageSize,int* imageWidth, int* imageHeight); 对不上啊。 首先WideString应该是wchar_t*,var devId:WideString就应该是wchar_t**,其次Int64应该用long long或者__int64,另外所有的out参数都是变参,要传引用。 typedef __cdecl int(*Dllfun)(wchar_t** devId, char** imageData, long long * imageSize, int* imageWidth, int* imageHeight);
EP外星人 2017-06-02
  • 打赏
  • 举报
回复
我字符串从来都是定义成Pchar或Pwidechar,没有试过直接用string,widestring
  • 打赏
  • 举报
回复
function CAM_GrabImage(var devId:WideString;out imageData:Pointer;out imageSize:Int64; out imageWidth:Integer; out imageHeight:Integer) : integer ; cdecl ; 和 typedef __cdecl int(*Dllfun)(char* devId, char* imageData,long* imageSize,int* imageWidth, int* imageHeight); 对不上啊。 首先WideString应该是wchar_t*,var devId:WideString就应该是wchar_t**,其次Int64应该用long long或者__int64,另外所有的out参数都是变参,要传引用。 typedef __cdecl int(*Dllfun)(wchar_t** devId, char** imageData, long long * imageSize, int* imageWidth, int* imageHeight);
nebula845026 2017-02-17
  • 打赏
  • 举报
回复
你的参数有问题,直接使用指针传不行吗 如果不行你试试换一下参数传递方式
santiaodahan 2017-02-16
  • 打赏
  • 举报
回复
Pointer 是无类型指针,坐标结构是TPoint。out关键字修饰的参数只能接受输出值,不能输入。PChar对应Char*,Pointer对应void*没有问题。但imageData可能是Delphi专用的类型对象,如果是,通常不能传递到C/C++中使用。dll传递参数应该用通用的基本类型或结构类型。
ynquan 2017-02-16
  • 打赏
  • 举报
回复
imageData:Pointer 这个里面的数据是X,Y 不是但一个变量。

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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