我用vc 编了一段程序,做成了dll,然后在vb里面调用,可是数据出现问题,下面是代码,大家帮我看看是怎么回事。该怎样改.大家别把我的程序看的很麻烦呀,其实很简单的一段,只是我把各个文件都写来了,以让大家帮我分析一下。拜托了,谢谢!
头文件(mfs.h)里定义一个结构体:结构体里含有很多个成员,在此列举一个
#ifndef _mfs_
#define _mfs_ 
struct mfs                               
{                  
     int mcw[5];                        
};
#endif函数get_data()用来向结构体变量赋值:
#include<iostream.h>
#include<fstream.h>
#include<windows.h>
#include"mfs.h";
int get_data(struct mfs mf)
{
        ifstream input1;
        static i,ret=0;
    
        input1.open("D:/数据/rig.txt",ios::in);
        if(!input1)
        {
                cout<<" rig.txt没打开"<<endl;
                ret=5;
                return(ret);
        }
        for(i=0;i<5;i++)
        {
                input1>>mf.mcw ;
        }
                input1.close();
                return (ret);
}
下面是主运算函数hly():
#include <windows.h>
#include<iostream.h>
#include"mfs.h"
struct mfs mf;
int _stdcall hly(int szq[5])
{
        extern int get_data(struct mfs mf);
        static int i,ret=20;
        int  wyx[5];
        ret=get_data(mf);
        for(i=0;i<5;i++)
        {
              wyx=szq+mf.mcw;
        }
        return (wyx[2]);
}
MyDll.cpp文件:
#include <windows.h>
#include<iostream.h>
#include"mfs.h"
extern "C"_declspec(dllexport)  int _stdcall   hly(int szq[5]);
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
{
switch( ul_reason_for_call )
{
case DLL_PROCESS_ATTACH:case DLL_THREAD_ATTACH:case DLL_THREAD_DETACH:case DLL_PROCESS_DETACH:        break;
}
return TRUE;
}
MyDll.def文件:
LIBRARY MyDLL
EXPORTS hlyvb当中:
Option Explicit
Private Declare Function hly Lib "MyDLL.dll" (ByRef ft As Long) As Long
Private Sub Command1_Click()
Dim b As Long
  b = hly(ft(0))
  Text1.Text = b
End sub

解决方案 »

  1.   

    我详细说一下,有一段vc程序,里面含有一个头文件(定义一个结构体),一个子程序(用来调用记事本里的数据为结构体变量赋值),一个主程序利用结构体变量来计算别的模型,然后将这段vc程序做成一个dll,在vb里调用这个dll,可是从计算程序返回到vb里的数据不对,我查的是结构体变量的值根本没有参加计算过程,似乎传进的数据在调用完子程序后就没了,如果把结构体变量换成数组,结果就对了,请问是怎么回事?该怎么办呢?大家给点帮助。