dll返回值调用问题

helingyun 2005-09-28 11:49:49
有一段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 mfs

Private 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



...全文
112 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
helingyun 2005-09-30
  • 打赏
  • 举报
回复
怎么没有人帮忙呢?我还等着大家的建议呢。
helingyun 2005-09-29
  • 打赏
  • 举报
回复
不对的。申明的是 __stdcall。只是返回值为零。可能是变量释放了,怎样不让它释放而调回来呢?大家再想想呀?
of123 2005-09-29
  • 打赏
  • 举报
回复
问题的关键是你的 C 函数没有声明成 __stdcall ,而是 "C" 约定。VB 无法调用它。
helingyun 2005-09-29
  • 打赏
  • 举报
回复
我把程序改成了这样还是不行呀?返回的值是零呀,快帮帮忙呀。改怎样改呀?
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 long

Private Sub Command1_Click()
Dim mf As mfs
CopyMemory mf,GetDataPoint(),Len(mf)
Text2.Text=mf.fset
End Sub

province_ 2005-09-28
  • 打赏
  • 举报
回复
不能这么取返回值吧,你该用COPYMEMORY把返回值指向的内存块拷贝到你的变量MF里。
copymemory mf,getdatapoin(),len(mf)
helingyun 2005-09-28
  • 打赏
  • 举报
回复
我试了一下,掉回的值为零呀。

1,485

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧