在VB中调用 先要声明,假设你的动态库名字叫 test.dll:Public Declare Function  CryptAcquireContext1 Lib "test"(ByVal phProv As Long ,ByVal pszContainer As String ,ByVal pszProvider As String , ByVal dwProvType As Long ,ByVal dwFlags As Long ) As BOOL上面的 第一个参数类型可能要有所斟酌,暂时我来不及看了,你再推敲。然后就可以在VB中调用这个函数了,和调用vb自己的函数一样。

解决方案 »

  1.   

    不好意思,
    前面三个参数的传递方式应该是ByRef 而不是ByVal
      

  2.   

    to tpProgramer(tp编程者);
    关键是LPCTSTR 类型,它是32位的呀,怎么办?
      

  3.   

    我认为楼上那种做法,有可能引起VC访问非法的异常!
    VB里的字符串,是BSTR,前两字节是字符串长度,用 byref 的话,把一个BSTR的址传过去,VC里给这个址赋值(LPCTSTR),可不管这个。试试
    Public Declare Function  CryptAcquireContext1 Lib "test"(Byref phProv As Long ,ByVal ptrszContainer As Long ,ByVal ptrszProvider As Long , ByVal dwProvType As Long ,ByVal dwFlags As Long ) As BOOL用的时候
    Dim szContainer() as byte
    Dim szProvider() as byte注意在使用这两变量前得初始化长度,或定义成
    Dim szContainer(1 to16) as byte调用时
    CryptAcquireContext1(phProv,varptr(szContainer(1)),......
      

  4.   

    to sandder(包含中)
    不对呀,这样的话,pszContainer要本就没有得到值
      

  5.   

    oh,对了,那里的值不是普通的字符串。得转换一下。
    那样做应该是可以的,我都是这样用的。
    szContainer=StrConv(ptrszContainer, vbUnicode)