有一段vc程序做成了DLL.我想把里面处理完毕的结果返回到vb里面,(处理完的结果存储在结构体里)。我返回结构体指针,可是在vb里调不出来。总显示约定错误,是怎么回事?我只是临时用一下这些语言编程。所以很多地方都不会。希望大家能够帮忙。谢谢!下面是代码:
vc程序:
#include <windows.h>
#include<iostream.h>
struct mfs                               
{  
     long int fset;                     
     int mcw[5];
}
extern "C"_declspec(dllexport) struct mfs *_stdcall  GetDataPoint(); int  struct mfs *_stdcall GetDataPoint()
{
struct mfs mf;
         struct mfs *m;
mf.mcw[0]=1;
mf.mcw[1]=2;
         mf.mcw[2]=3;
         mf.mcw[3]=4;
mf.mcw[4]=5; 
mf.fset =10;
m=&mf;
return (m );
}
vb里面:
Option Explicit
Private Declare Function GetDataPoint Lib "MyDLL.dll" () As mfsPrivate Sub Command1_Click()
Dim mf As mfs
mf= GetDataPoint()
Text3.Text = mf.fset
End Sub其中的mfs定义在模块中:
Type mfs
     mcw(5) As Long
     fset As Long
End Type

  
      

解决方案 »

  1.   

    不能这么取返回值吧,你该用COPYMEMORY把返回值指向的内存块拷贝到你的变量MF里。
    copymemory mf,getdatapoin(),len(mf)
      

  2.   

    我把程序改成了这样还是不行呀?返回的值是零呀,快帮帮忙呀。改怎样改呀?
    vb里面:
    Option Explicit
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
    Private Declare Function GetDataPoint Lib "MyDLL.dll" () As longPrivate Sub Command1_Click()
    Dim mf As mfs
    CopyMemory mf,GetDataPoint(),Len(mf)
    Text2.Text=mf.fset
    End Sub
      

  3.   

    问题的关键是你的 C 函数没有声明成 __stdcall ,而是 "C" 约定。VB 无法调用它。
      

  4.   

    不对的。申明的是 __stdcall。只是返回值为零。可能是变量释放了,怎样不让它释放而调回来呢?大家再想想呀?