把dll放到系统目录或者exe目录调试

解决方案 »

  1.   

    VB哪能调用(.lib)中的函数啊?
    只能调用动态库(.dll)中的函数。
    为那个.lib编一个.dll外壳吧。
      

  2.   

    試一下 gump2000(阿甘) 的方法
      

  3.   

    要综合以下三篇文章:
    文章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若用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 手册,上面有详细介绍。
    再附:
    不应出什么问题呀?怎么回事?
      

  4.   

    同意pbfan(Ilikepb的方法III. 在oneDLL.def文件中的EXPORTS后加入函数名MessageEXPORTS
      Message //所加代码
    是关键