我用vc 调用别人用delphi开发的dll,里面有个函数的一个参数为array[0..384]of char,我在vc中传递了一个数组char m[385] 可传递过去就没有响应了。如果是整形或者其他基本类型都调用成功,就这个类型有问题。

解决方案 »

  1.   

    char m[385];//调用dll之前
    memset(m,0,385);
      

  2.   

    ..........用在dll的参数,一般会定义成PChar类型的参数,也就是char * .
      

  3.   

    但是人家已经定义成array[0..384]of char,没有定义成pchar
      

  4.   

    memset(m,0,385);也没用,还是一样的效果
      

  5.   

    其实在delphi的代码里面,array of char和pchar有时候是可以相互隐式转换的.你将vc里面的函数定义,参数类型改成char *试试调用前,先分配够385byte的空间
      

  6.   

    呵呵,用delphi调,总可以吧?
    大不了再用delphi写个dll,再次封装一下.
      

  7.   

    呵呵,我其实是用JAVA的JNI调用delphi dll 利用vc dll封装了一次的
      

  8.   

    呵呵,我其实是用JAVA的JNI调用delphi dll 利用vc dll封装了一次的
      

  9.   

    呵呵,我其实是用JAVA的JNI调用delphi dll 利用vc dll封装了一次的
      

  10.   

    关键是你的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.
      

  11.   

    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
            }}这是怎么回事呢?