新手100分求教一个小问题 把dll放到系统目录或者exe目录调试 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 VB哪能调用(.lib)中的函数啊?只能调用动态库(.dll)中的函数。为那个.lib编一个.dll外壳吧。 試一下 gump2000(阿甘) 的方法 要综合以下三篇文章:文章1:基本生产方法文章2:解决了文章1中 Error#49 错误,即在菜单中设置为_stdCall文章3:其它一些信息,比如如何调用,类型转换等问题。'==========================================================标 题: 作一个简单的DLL (转载)【 原文由 wangz 所发表 】m原来一直不太会用,今天试了试并不太难,把过程写一写,供和我一样面的同学参考。:)1。生成DLL用VC6生成MFC AppWizard(dll)工程。设Project Name为oneDllI.在oneDll.cpp中加入自定义函数。int Message(LPCTSTR strTest){MessageBox(NULL, strTest, NULL, MB_ICONEXCLAMATION); return 1;}II. 在oneDll.h中加入函数声明。int Message(LPCTSTR strTest);III. 在oneDLL.def文件中的EXPORTS后加入函数名MessageEXPORTS Message //所加代码IV.编译连接,生成oneDll.dll. 方便起见,将其拷入Windows的System目录中(我还把它放在了"C:\temp"下,后面用)。这样,在Win32应用程序中就可以使用这个DLL了。2。在VC中使用用VC6生成MFC AppWizard(exe)工程。设Project Name为testDllI.在TestDllView.h 中加入声明:HINSTANCE handlerDLL = NULL;typedef int(* MESSAGE)(LPCTSTR cstrTest);MESSAGE Message;II.在Menu中加入DLL->DIRECT_DLL,然后在Class Wizard生成的OnDllDirect函数中加入代码。void CTestDllView::OnDllDirect() {handlerDLL = LoadLibrary("OneDLL.DLL");//重要if (handlerDLL == NULL){MessageBox("The OneDLL.Dll cannot be loaded");return;}Message = (MESSAGE)GetProcAddress(handlerDLL, "Message");//重要CString strTest("test of augument");Message(strTest);}III.编译连接运行就可以测试所建的DLL了。3。在VB中使用更为简单I.在module1中声明:Public Declare Function Message Lib "c:\temp\oneDll.dll" _ (ByVal X As String) As IntegerII.设Form1上加了一个Command1.那么Private Sub Command1_Click()On Error Resume Next'上面一句是可能函数参数类型声明不对,出现'Bad DLL calling convention (Error 49)的错误,那位大侠帮看一下'只是为了学用DLL,可以忽略这个错误Message "vb test" End SubIII.运行就可以测试了。3.其他Win32应用程序。比如我常用的桌面地理信息系统(GIS)ArcView中的Avenue宏语言中可以如下使用:aDll = Dll.Make("c:\temp\oneDll.dll".asFileName)Mess = DllProc.Make(aDll, "Message", #DLLPROC_TYPE_INT32,{#DLLPROC_TYPE_STR})theWinHandle = DLL.GetAVWindowHandleDLL.SetRefresh(true)Mess.Call({"TEST IN ARCVIEW"})'==========================================================发信人: Beita (逍遥), 信区: VisualBasic标 题: VB调用的VC的DLL函数必须是_stdcall的发信站: BBS 水木清华站 (Wed Nov 25 14:58:44 1998) 1m32mWWW-POST0m[0m若用VC++(我用的是5.0)为VB写DLL函数,必须使用_stdcall方式编译。若要在函数中声明,例如:#define WINAPI _stdcall 或者int _stdcall functionname(parameters);都会在编译时产生警告:warning......比较好的办法是:在菜单Project中选择settings...进入该工程的设置。选择C/C++,在CODE GENERATION 中选择_stdcall。That's all.'==========================================================发信人: microII (不懂你), 信区: Visual标 题: Re: VC编的DLL用vb如何调用?发信站: 西北网络中心兵马俑 BBS 站 (Wed Jan 20 16:30:01 1999)【 在 huhu (闭门造车中) 的大作中提到: 】: 难道没人知道吗?SORRY,没看见。用C/C++编写DLL,用VB调用,如果没有Object对象作为参数,且无字符串作为参数,则可直接编程。stdcall如下用法:float stdcall mytest(flost a,float far * b)如果编写DLL,则还应同时生成一个DEF文件,告诉外界输出函数的名字和Index.在VB中调用,其声明与Windows API声明相同。Declare function mytest lib "mydll.dll"(byval a as single,byval b assingle) as single如要传递string型,在VB中可声明为 as string,在C中可声明为BSTR。其中byval,byref可根据需要声明。附:VB中的integer,C中为short.(16位与32位不同)。可参考Microsoft MCSD的 VB 手册,上面有详细介绍。再附:不应出什么问题呀?怎么回事? 同意pbfan(Ilikepb的方法III. 在oneDLL.def文件中的EXPORTS后加入函数名MessageEXPORTS Message //所加代码是关键 VB调用C++写的DLL时参数传递的问题 还是有关Datareport的问题 我用的是DATA控件连接的数据库可总是不能添加记录 超简单问题:ms sql server SQL语句失效,怎么解决? 关于数据库查询记录集 问问,我看到很多财务软件里面可以直接在表格里面输入数据。。。。。 关于网卡的MAC地址 模块化的程序怎么做? 如何获取密码框内的密码呢? 报表的事,who know? 关于VB中WebBrowser和ActiveBar的问题 请教:关于vb创建多线程!
只能调用动态库(.dll)中的函数。
为那个.lib编一个.dll外壳吧。
文章1:基本生产方法
文章2:解决了文章1中 Error#49 错误,即在菜单中设置为_stdCall
文章3:其它一些信息,比如如何调用,类型转换等问题。'==========================================================
标 题: 作一个简单的DLL (转载)【 原文由 wangz 所发表 】m
原来一直不太会用,今天试了试并不太难,把过程写一写,供和我一样面的
同学参考。:)1。生成DLL
用VC6生成MFC AppWizard(dll)工程。设Project Name为oneDllI.在oneDll.cpp中加入自定义函数。int Message(LPCTSTR strTest)
{
MessageBox(NULL, strTest, NULL, MB_ICONEXCLAMATION);
return 1;
}II. 在oneDll.h中加入函数声明。int Message(LPCTSTR strTest);III. 在oneDLL.def文件中的EXPORTS后加入函数名MessageEXPORTS
Message //所加代码IV.编译连接,生成oneDll.dll. 方便起见,
将其拷入Windows的System目录中(我还把它放在了"C:\temp"下,后面用)。这样,在Win32应用程序中就可以使用这个DLL了。2。在VC中使用
用VC6生成MFC AppWizard(exe)工程。设Project Name为testDllI.在TestDllView.h 中加入声明:HINSTANCE handlerDLL = NULL;
typedef int(* MESSAGE)(LPCTSTR cstrTest);
MESSAGE Message;II.在Menu中加入DLL->DIRECT_DLL,然后在Class Wizard生成的OnDllDirect函数
中加入代码。void CTestDllView::OnDllDirect()
{handlerDLL = LoadLibrary("OneDLL.DLL");//重要
if (handlerDLL == NULL)
{
MessageBox("The OneDLL.Dll cannot be loaded");
return;
}
Message = (MESSAGE)GetProcAddress(handlerDLL, "Message");//重要
CString strTest("test of augument");
Message(strTest);}III.编译连接运行就可以测试所建的DLL了。3。在VB中使用更为简单
I.在module1中声明:
Public Declare Function Message Lib "c:\temp\oneDll.dll"
_ (ByVal X As String) As IntegerII.设Form1上加了一个Command1.那么
Private Sub Command1_Click()
On Error Resume Next
'上面一句是可能函数参数类型声明不对,出现
'Bad DLL calling convention (Error 49)的错误,那位大侠帮看一下
'只是为了学用DLL,可以忽略这个错误Message "vb test"
End SubIII.运行就可以测试了。3.其他Win32应用程序。比如我常用的桌面地理信息系统(GIS)ArcView
中的Avenue宏语言中可以如下使用:aDll = Dll.Make("c:\temp\oneDll.dll".asFileName)
Mess = DllProc.Make(aDll, "Message", #DLLPROC_TYPE_INT32,
{#DLLPROC_TYPE_STR})
theWinHandle = DLL.GetAVWindowHandle
DLL.SetRefresh(true)
Mess.Call({"TEST IN ARCVIEW"})'==========================================================
发信人: Beita (逍遥), 信区: VisualBasic
标 题: VB调用的VC的DLL函数必须是_stdcall的
发信站: BBS 水木清华站 (Wed Nov 25 14:58:44 1998) 1m32mWWW-POST0m[0m若用VC++(我用的是5.0)为VB写DLL函数,必须使用_stdcall方式编译。
若要在函数中声明,例如:#define WINAPI _stdcall 或者
int _stdcall functionname(parameters);
都会在编译时产生警告:warning......
比较好的办法是:在菜单Project中选择settings...进入该工程的设置。
选择C/C++,在CODE GENERATION 中选择_stdcall。
That's all.'==========================================================
发信人: microII (不懂你), 信区: Visual
标 题: Re: VC编的DLL用vb如何调用?
发信站: 西北网络中心兵马俑 BBS 站 (Wed Jan 20 16:30:01 1999)【 在 huhu (闭门造车中) 的大作中提到: 】
: 难道没人知道吗?SORRY,没看见。
用C/C++编写DLL,用VB调用,如果没有Object对象作为参数,且无字符串作
为参数,则可直接编程。
stdcall如下用法:
float stdcall mytest(flost a,float far * b)
如果编写DLL,则还应同时生成一个DEF文件,告诉外界输出函数的名字和Index.
在VB中调用,其声明与Windows API声明相同。
Declare function mytest lib "mydll.dll"(byval a as single,byval b as
single) as single如要传递string型,在VB中可声明为 as string,在C中可声明为BSTR。
其中byval,byref可根据需要声明。
附:
VB中的integer,C中为short.(16位与32位不同)。
可参考Microsoft MCSD的 VB 手册,上面有详细介绍。
再附:
不应出什么问题呀?怎么回事?
Message //所加代码
是关键