我用delphi 写了个dll
代码如下:
 function QrySPINFO( const BH:pchar;out MC, GG, DW,JJ:pchar):Boolean;stdcall;
 begin
   MC:='123';
   GG:='234';
   DW:='456';
   JJ:=BH;
   result:=true;
 end;然后我又在vc里面写了个函数调用
void CTttttttDlg::OnButton1() 
{
HINSTANCE hdll=::LoadLibrary("client.dll");
         bool (_stdcall *QrySPINFO)(const void* , void*,void*,void*,void*);
      QrySPINFO=(bool(_stdcall *)(const void*,void*,void*,void*,void*))::GetProcAddress   (hdll,"QrySPINFO");
char* pSpmc=new char(100);
char* pSpgg=new char(100);
char* pSpdw=new char(100);
char* pSpjg=new char(100);
 
bool isok=(bool)QrySPINFO("001",pSpmc,pSpgg,pSpdw,pSpjg);
if (isok)
  AfxMessageBox(pSpdw);

}结果AfxMessageBox出来的都是些奇怪的字符,而且每次点击按钮后奇怪的字符都不一样
请问这是为什么?
如果哪位能把在vc中成功调用delphi的那个dll 的代码贴出来,我全部分数送出!!!

解决方案 »

  1.   

    dll中不能直接MC:='123';这样写, 这样写的结果只是将MC指向了常量字符串'123'而已, 并且在返回时MC恢复成传入的原来那个值, 所以你在messagebox中打出来的是new char(100)分配的那块内存中的原始值.
    要在DLL中用strcopy将'123'的内容复制到mc中
      

  2.   

    同意  Idle_(阿呆)  看法,
    其实vc的中字符串是以“#0”为结尾的,因此在delphi中要填充#0到mc中
      

  3.   

    同意,delphi会优化字符串,如果用其他语言调用,还是用strcopy好
      

  4.   

    MC:='123';改成
    CopyMemory 或 CopyStr 这些函数来赋值,看如何
      

  5.   

    同意上面的讨论,顺便提一句,记得要调用FreeLibrary哦