vc 写的dll在vb下调用,出问题了 1、在Vc用extern "C"声明函数。2、不应用_declspec(dllexport) 导出函数名,改用导出文件指定方式。3、详情参考MSDN 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 to liemen() vc:long _declspec(dllexport) DllRegister(char* DllFileName){}这个是在vc里的函数,不是声明 用文件指定输出的函数,不要用_declspec(dllexport) 。这个文件就是.DEF文件:如:EXPORTS vc作dll有很多的细节,看看技术内幕中的解析,能有所帮助 //RegDll.Cpp#include <windows.h>extern "C" _declspec(dllexport) HRESULT DllRegisterServer();long _declspec(dllexport) DllRegister(char* DllFileName){ HMODULE hMod=LoadLibrary(DllFileName); if (0==hMod) { return 1; } typedef void(*URegDll)(); URegDll tReg = (URegDll)GetProcAddress(hMod,"DllRegisterServer"); if(0==tReg) { return 2; } tReg(); FreeLibrary(hMod); return 0;}//RegDll.DefLIBRARY "DllReg"EXPORTS DllRegister @1//vbOption ExplicitPrivate Declare Function DllRegister Lib "DllReg.dll" (ByVal DllFile As String) As LongPrivate Sub Command1_Click() Dim mPath As String Dim tPath As Long mPath = App.Path & "\a.dll" tPath = DllRegister(mPath) Debug.Print tPath MsgBox tPathEnd Sub希望大家再关注一下 我也碰到这样的问题,vb下调试通不过,但编编译成exe则行,不知道是何原因,但可以用这种方发调试,在vc的dll下调试vb的程序,这样同样可以跟踪结果。 to zhangjianwen(张海勤) 就是这样的 to :dyugao(风舞神枭) 我想不是程序的原因,可能是开发环境的设置问题。 不要用char* 做参数,因为vb是Unicode的,而且vb下的字符串的存储方式与vc也不同,字符串的最前面存的是字符串的长度。应该用与Unicode 相适应的字符串指针,例如:BSTR.最好用com 那个BSTR怎么用啊?好像是不怎么好用的邦一下忙啊。 简单的问题 异步Socket 是支持多线程的么? 颜色比较有什么地方错了吗 请问怎么在win32下用gdi+实现双缓存? 无标题对话框已经被picture控件占满整个客户去,怎么点击左键移动? 多个工程问题 一直解决不了,帮忙!!! 如何在vc中画图形而不出现很多重复的框???? 使用MFC的socket类,如何获得客户机的IP地址和端口号?(超级散分题) 全局函数怎样对视图进行操作啊?在线等,挺急! 有关动态连接库和静态连接库的困惑 求助 那里有setupbuilder的可用正式版本下载? 为什么我的类看不见了?
vc:
long _declspec(dllexport) DllRegister(char* DllFileName)
{}
这个是在vc里的函数,不是声明
这个文件就是.DEF文件:
如:EXPORTS
{
HMODULE hMod=LoadLibrary(DllFileName);
if (0==hMod)
{
return 1;
}
typedef void(*URegDll)();
URegDll tReg = (URegDll)GetProcAddress(hMod,"DllRegisterServer");
if(0==tReg)
{
return 2;
}
tReg();
FreeLibrary(hMod);
return 0;
}//RegDll.DefLIBRARY "DllReg"
EXPORTS
DllRegister @1
//vbOption ExplicitPrivate Declare Function DllRegister Lib "DllReg.dll" (ByVal DllFile As String) As LongPrivate Sub Command1_Click()
Dim mPath As String
Dim tPath As Long
mPath = App.Path & "\a.dll"
tPath = DllRegister(mPath)
Debug.Print tPath
MsgBox tPath
End Sub
希望大家再关注一下
我想不是程序的原因,可能是开发环境的设置问题。
好像是不怎么好用的
邦一下忙啊。