其实在delphi的代码里面,array of char和pchar有时候是可以相互隐式转换的.你将vc里面的函数定义,参数类型改成char *试试调用前,先分配够385byte的空间
呵呵,用delphi调,总可以吧? 大不了再用delphi写个dll,再次封装一下.
呵呵,我其实是用JAVA的JNI调用delphi dll 利用vc dll封装了一次的
呵呵,我其实是用JAVA的JNI调用delphi dll 利用vc dll封装了一次的
呵呵,我其实是用JAVA的JNI调用delphi dll 利用vc dll封装了一次的
关键是你的DLL定义的接口不是符合windows API格式的接口. delphi中不支持直接用数组类型作为参数,而是支持数组定义一个别名后作为参数. 如: type TCharAryParam=array [0..384] of char; function TestFunc(CharAryParam:TCharAryParam):integer;或者可以用String类型来实现; function TestFunc(strParam:String):integer; 在C++/VC++中关于"字符串",只能使用字符数组来实现,而且必以#0(NULL)结尾!因此,对于C++来说最好是使用一个指针完成对数组类型参数的传入了.Delphi中定义了一种字符指针类型PChar,就是为了与C风格相兼容的.delphi: PChar (^Char)C++/VC++: char *所以建议楼主声明接口时这样: Delphi: Function Func(strParam:PChar):integer;StdCall;C++: int Func(char *strParam);在使用的时候,楼主一定要记得,数组最好一个元素要是#0(NULL),否则,会有些乱码,甚至会引发不可预料的BUG.
vc调用的语法是什么,我总是不成功.CutterDll.dll 在DELPHI 中的函数声明: Function addtest(var x,y: Integer):Integer;stdcall;external VC我的写法是:typedef int (_stdcall* myadd)(int,int); click(){ HINSTANCE hDLL; hDLL = LoadLibrary("D:\\Dev\\KairuanPictest\\CutterDll.dll"); if ( hDLL!=NULL ) { myadd t1 = (myadd)GetProcAddress(hDLL, "addtest"); //这步得到的地址为0x000000000 int sss = t1(1,2); //于是这里就出错了.提示是Unhandled exception in ka.exe : 0xc0000005: access violoation }}这是怎么回事呢?
memset(m,0,385);
大不了再用delphi写个dll,再次封装一下.
delphi中不支持直接用数组类型作为参数,而是支持数组定义一个别名后作为参数.
如:
type TCharAryParam=array [0..384] of char;
function TestFunc(CharAryParam:TCharAryParam):integer;或者可以用String类型来实现;
function TestFunc(strParam:String):integer;
在C++/VC++中关于"字符串",只能使用字符数组来实现,而且必以#0(NULL)结尾!因此,对于C++来说最好是使用一个指针完成对数组类型参数的传入了.Delphi中定义了一种字符指针类型PChar,就是为了与C风格相兼容的.delphi: PChar (^Char)C++/VC++: char *所以建议楼主声明接口时这样:
Delphi:
Function Func(strParam:PChar):integer;StdCall;C++:
int Func(char *strParam);在使用的时候,楼主一定要记得,数组最好一个元素要是#0(NULL),否则,会有些乱码,甚至会引发不可预料的BUG.
在DELPHI 中的函数声明:
Function addtest(var x,y: Integer):Integer;stdcall;external
VC我的写法是:typedef int (_stdcall* myadd)(int,int); click(){
HINSTANCE hDLL;
hDLL = LoadLibrary("D:\\Dev\\KairuanPictest\\CutterDll.dll"); if ( hDLL!=NULL ) { myadd t1 = (myadd)GetProcAddress(hDLL, "addtest");
//这步得到的地址为0x000000000 int sss = t1(1,2);
//于是这里就出错了.提示是Unhandled exception in ka.exe : 0xc0000005: access violoation
}}这是怎么回事呢?