Private Declare Function Initial Lib "c:\123.dll" (ByVal HWND As HWND) As LongPrivate Sub Form_Load()
Initial Me.HWND
End Sub

解决方案 »

  1.   

    Private Declare Function Initial Lib "c:\123.dll" (ByVal HWND As Long) As LongPrivate Sub Form_Load()
    Initial Me.HWND
    End Sub
      

  2.   

    好像要用byref            我用VC开发了一个常规动态连接库.
    其中某输出函数的参数为char*:
    extern"C"__declspec(dllexport)voidOpenMyFile(char*strFile)在VB中我是如下用的:
    ...
    PrivateDeclareFunctionOpenMyFileLib"Capturer.dll"(ByValstrFileAsString)AsLong
    ...在打开文件按钮的事件中:
    DimsFileAsString
    sFile="C:\\a.avi"
    OpenMyFilesFile//此语句报错!!!!!!!!!!!!!!!!!!!!!!!!!!1
    ...大侠们help.注:我用VC调用该动态库无任何问题.
    ---------------------------------------------------------------你vc要得到的是指向字符串的指针,所以申明的时候应该用ByRef。如下:
    PrivateDeclareFunctionOpenMyFileLib"Capturer.dll"(ByRefstrFileAsString)AsLong
    ---------------------------------------------------------------指针类型声明的是要用BYREF(按地址传送)---------------------------------------------------------------控件数组的下标
    ---------------------------------------------------------------VC中的输出函数应为__stdcall调用.
    ---------------------------------------------------------------关键是函数导出约定楼上说的是对的_stdcall是Pascal程序的缺省调用方式,通常用于Win32Api中,函数采用从右到左的压栈方式,自己在退出时清空堆栈。VC将函数编译后会在函数名前面加上下划线前缀,在函数名后加上"@"和参数的字节数。2、C调用约定(即用__cdecl关键字说明)按从右至左的顺序压参数入栈,由调用者把参数弹出栈。对于传送参数的内存栈是由调用者来维护的(正因为如此,实现可变参数的函数只能使用该调用约定)。另外,在函数名修饰约定方面也有所不同。VB只支持_stdcall现在知道了吗---------------------------------------------------------------PrivateSubCommand30_Click(IndexAsInteger)EndSub
    因为你定义了一个控件数组index为索引
      

  3.   

    这些代码是不是都是写在窗体文件内? (我今天见到VB里好像一般分模块和窗体两类文件)VB里可以用HWND类型吗?
      

  4.   

    VB调用vc写的dll文件  各位大虾,我用VC写了一个DLL文件,里面有一个add函数,在调用的时候VB提示说找不到add在DLL文件中的入口点,请问这是怎么回事!  
    ---------------------------------------------------------------  
     
    两个情况:  
    1.  ActiveX  DLL:  
             regsvr32  cfile.dll  
             在VB中project->reference  
             然后创建对象,并调用其方法  
     
    2.  普通动态连接库  
             这就需要申明函数了,可以参考其它API申明的方式来做。  
             private  declare  function  add  lib  "cfile"  alias  "add"  (byval  a  as  integer,byval  b  as  integer)  as  integer  
     
     
    ---------------------------------------------------------------  
     
    在VC里,函数名登记到.def文件里了没有?注意不是__declspec(dllexport)这个。  
     
    .def文件里一定要有:  
     
    EXPORTS  
     
           add      @1  
    ---------------------------------------------------------------  
     
    自己定义也可以。  
     
    或者你用VC工程向导的“MFC  AppWizard(dll)”->“Regular  Dll  with  shared  MFC”也就是第二项,这个就为你生成了.def。  
     
    用MFC的DLL要有MFC支持哦~设计接口参数时,可  别  来个“...  Func(CWordArray  &a)”这样的东东……  
    ---------------------------------------------------------------  
     
    主要是接口问题,我举个最简单的倒子给你:  
    一、在VC中建一个动态连接库工程取名XX,不要MFC支持  
    二、建一个C/C++文件,如XX.C,内容如下:  
    SHORT  SumTwo(SHORT  a,SHORT  b)  
    {  
         return  a+b;  
    }  
    三、建一个DEF文件,如XX.DEF,内容如下:  
    EXPORTS  
         SumTwo  
    四、将这两个文件都加入当前工程XX  
    五、将当前工程编译成XX.DLL  
    六、用VB来调用SumTwo这个函数,建新VB工程  
    七、在默认的FORM上加上一个按钮Command1  
    八、在Command1的OnClick中加入  
           MsgBox  SumTwo(3,4)                '显示3+4的值  
    九、将前面生成的XX.DLL复制到VB工程所在目录  
    十、在这个文件的最前面声明SumTwo这个函数  
           Private  Function  SumTwo  Lib  "XX.DLL"  alias  "SumTwo"  (a  As  Integer,b  As  Integer)  As  Integer  
    十一、运行这个VB程,点击Command1按钮,你将得到3+4的和7  
    十二、关于第(十)步函数的声明请参看MSDN中的相关资料,  
               主要是参数和返回值的数据类型不能弄错。  
     
    ---------------------------------------------------------------  
     
    在VC中生成的DLL只有是扩展的DLL才能被其它语言调用,所以你在VC中生成的DLL可能不是扩展的,因此约定出错的,你把你VC的DLL改成扩展的就可以了。
      

  5.   

    i will try,thank you so much.
    嗯,空了还是该学学VB   :)
      

  6.   

    Declare Sub Initial Lib "你的DLL文件名" (ByVal HWND As Long)
      

  7.   

    急,我这里不知道为什么老是报"file not found?"
      

  8.   

    我实在不知道是哪里出了问题.
    可否给我一个编译通过顺利运行的实例,小小的就好?
    1.VC做的导出void Initial(HWND hWnd);的支持MFC的DLL(源工程)
    2.VB的单窗体,在Form_Load()里调用此DLL导出函数焦急等待...
      

  9.   

    文件名i'm sure 是一致的,相对路径/绝对路径都试过了,还是不行:(