vc动态连接库调用问题,急!!!

来源:百度知道 编辑:UC知道 时间:2024/05/29 05:10:51
文件为NG_DFZ.dll,它里头有3个函数,我要用其中的fzmix函数。按照下面的程序,运行是没错的,但是会弹出“得到函数指针出错”messagebox,我分析是GetProcAddress(hModule,"fzmix")没有取回指针,fzmix在vb下的对象浏览器可以看是这样的:Fzmix(P As Double, Pu As Integer, T As Double, Tu As Integer, Zm As Integer, MCN As Integer, X() As Double, Sc As Integer) As Double
请大家帮帮忙看看哪地方出了问题,是语法问题,还是这个dll本身的问题。谢谢,满意追加20分。

void CMydll::OnCallDll()
{
typedef double (*FUN)(double ,int ,double ,int ,int ,int , double ,int );
HINSTANCE hModule;
hModule = LoadLibrary("NG_DFZ.dll");
FUN ff;
if (hModule!= NULL)
{

ff = (FUN)GetProcAddress(hModule,"fzmix");
if(ff==NULL)
{
MessageBox("得到函数指针出错");
}

else
{
FZ = ff(22,3,13,14,2,3,4,3);
}

}

FreeLibrary(hModule);
}
fzmix和Fzmix,运行时是一样的。我已经用regsvr32.exe在运行里注册了该dll,但运行依然是。
很痛苦。

是否应该是
typedef double (*FUN)(double ,int ,double ,int ,int ,int , double *,int );

VB的话,默认的传参方式都是传址的,除非加上ByVal才表示传值,所以你把参数都改成指针试试?

好像另一种方法是: VC 调用先写出 导出函数的.H文件,然后直接引用就可以了

或者 你的定义不正确
应该是这样才对

typedef double (__stdcall *FUN)(double ,int ,double ,int ,int ,int , double ,int );

在VB中 用什么函数名 在VC里 遵循最好 大小写分辨

肯定是你的LoadLibrary后面的dll文件的路径不对
只有这种可能,相信我

是不是extern "C" __declspec(dllexport) 没有加extern "C"?
没加
extern "C"函数名就不是fzmix
而是?fzmix@@*********一样的东西
建议你用MAKEINTRESOURCE()获得正确函数名
GetProcAddress(hDLL, MAKEINTRESOURCE(1))