vc dll输出函数:
int AllocHandle(void **MyPointer)
{
     Rs232Serial *P=new MyDialog();
  *MyDialog= (void *)P;
  if(P!=NULL)
  {
   return(1);
  }
  else
   return(0);  
}在delphi中这样声明:
function AllocHandle(MyPointer : MyHandle):Longint;external 'RS232DLL.dll'
其中 MyHandle = ^Pointer;
Handle : Pointer;
if (AllocHandle(@Handle)=1) then
....
结果函数返回值正确,可是指针值没有传出来,请教各位!

解决方案 »

  1.   

    function AllocHandle(var MyPointer : MyHandle):Longint;external 'RS232DLL.dll'
      

  2.   

    function AllocHandle(var MyPointer : MyHandle):Longint;external 'RS232DLL.dll'哈哈   alphax(多喝了三五杯) 今天没多喝?
      

  3.   

    int AllocHandle(void **MyPointer)
    {
      Rs232Serial *P=new MyDialog();
      *MyDialog= (void *)P;
      if(P!=NULL)
      {
       return(1);
      }
      else
       return(0);  
    }
    我观察调用应该没有问题(不知道调用约定一样不一样);
    但是上面的函数中确实从来没有用过 MyPointer 呀??
      

  4.   

    哈哈哈。。同意 findcsdn(searchcsdn)
      

  5.   

    findcsdn(searchcsdn) :
       不好意思,我是手工抄过来的,函数抄错了,应该是:
    int AllocHandle(void **MyPointer)
    {
         Rs232Serial *P=new MyDialog();
      *MyPointer= (void *)P;
      if(P!=NULL)
      {
       return(1);
      }
      else
       return(0);  
    }
    调用应该没有问题的,我用delphi翻译了上述函数放在调用程序中直接调用,指针值返回不为空。
    请各位大侠帮帮忙,再给俺出出主意吧!
     
      

  6.   

    我想可能就是调用约定的事了.
    function AllocHandle(MyPointer : MyHandle):Longint;stdcall;external 'RS232DLL.dll'如果不行还有 cdecl;safecall 等换着试一下。