我有个C++写的动态链接库,导出方式用extern "C" CString _declspec(dllexport)funname
在Delphi中调用时,当我像函数传入参数时就会报错,后来发现Dll中函数参数类型为CString的
请问:在Delphi中对应VC++的CString的是什么?PChar我也试过了,不行
但Dll中有些函数的返回值也是用CString的,我直接可以用showmessage弹出信息,不会报错,
以上,请帮忙解决

解决方案 »

  1.   

    看下调用约定是否一致,不知道你Delphi里面是怎么调用的
      

  2.   

    d中没有对应cstring的类,pchar不行,pchar是d的基本类型,c++在dll中使用cstring作为参数或返回值并不合适,需要做特殊的处理,可以考虑使用char*或lpstr替代
      

  3.   

    DELPHI代码一般都用pchar交互,并且用stdcall作参数传递约定
    C++的DLL要用char*作参数
      

  4.   

    如果C++的dll你能修改,那就改成Char*吧,如果你改不了,那么,因为CString是VC特有的数据类型,所以Delphi无法与之交互。就像如果Delphi导出一个返回值是TStringList的函数,C++没法接收一样。
      

  5.   

    例子 ,如下:
     SendRcv2: function(cBegin: Pchar; SendMess: Pchar; ReturnMess: Pchar): PChar; stdcall;
     RMess := Sendrcv2('12345678', Pchar(Value), pchar(sReturnStr));
    constructor TShy.Create(Value, sfdm: string);
    var h: Integer;
    begin
        inherited create;
        h := LoadLibrary('SendRcv2.dll');
        if h <> 0 then begin
            @SendRcv2 := GetProcAddress(h, 'SendRcv2');
            if @SendRcv2 = nil then begin
             //  error
            end;
        end
        else begin
          //  error
        end;
    end;
      

  6.   

    谢谢各位,已经OK,修改了下C++ 用char*代替了