dll 的调用:
其实不管你要调用的是你自己写的DLL,还是别人写的DLL,首先你要分清楚它是 ActiveX DLL,还是标准的DLL,因为它们在调用时是有区别的。
1、ActiveX DLL
要调用ActiveX DLL你必须要注册这个DLL(如果是用VB写的,在编译时自动会注册。否则可用Regsvr32.exe来注册。windows安装目录\system(如是NT则是system32)\Regsvr32 DLL的完整路径)
然后你可以在工程中引用该DLL。
再然后你就可以使用其中的类了。比如:dim clsXXXX as XXXX(该DLL中的类名)
2、标准DLL
标准DLL的使用和平时使用Windows API时是一样的。
你要使用该DLL中输出的函数,就必须在中对该函数进行声明。
比如:Public Declare Function DLL中的函数名 Lib 你的DLL的完整路径 Alias 函数别名(在此要区分大小写) (参数列表) As 返回类型
其实不管你要调用的是你自己写的DLL,还是别人写的DLL,首先你要分清楚它是 ActiveX DLL,还是标准的DLL,因为它们在调用时是有区别的。
1、ActiveX DLL
要调用ActiveX DLL你必须要注册这个DLL(如果是用VB写的,在编译时自动会注册。否则可用Regsvr32.exe来注册。windows安装目录\system(如是NT则是system32)\Regsvr32 DLL的完整路径)
然后你可以在工程中引用该DLL。
再然后你就可以使用其中的类了。比如:dim clsXXXX as XXXX(该DLL中的类名)
2、标准DLL
标准DLL的使用和平时使用Windows API时是一样的。
你要使用该DLL中输出的函数,就必须在中对该函数进行声明。
比如:Public Declare Function DLL中的函数名 Lib 你的DLL的完整路径 Alias 函数别名(在此要区分大小写) (参数列表) As 返回类型
2、因为你用了MFC,所以你写的DLL所依赖的DLL也必须要有
3、VB只支持__Stdcall方式导出的函数
4、DLL的位置放在应用程序目录中或是system或是system32
Change the ByRef to ByVal in the Declare-statement. Sending it as a ByRef will send it as it is defined internally in VB. ByVal will send the actual string and not the internal struct (something like length + string).
Public Declare Sub DeReceiveStringFromVB Lib "MyVCDLL" ( _
ByVal s1 As String, ByVal s2 As String)DeReceiveStringFromVB "aaa", "bbb"
__declspec( dllexport ) void __stdcall DeReceiveStringFromVB(LPCSTR lp1,LPCSTR lp2)
{
std::stringstream stmp;
stmp<<"ReceiveStringFromVB("<<lp1<<","<<lp2<<")";
OutputDebugString(stmp.str().c_str());
}
VC pass string to VB
__declspec( dllexport ) void __stdcall Long2String2(long lpdata,LPSTR pszString, LONG cSize)
{wsprintf(pszString,"%d",lpdata);
}
Private Declare Sub Long2String2 Lib "MyVCDLL" ( _
ByVal pFunc As Long, ByVal sMyString As String, ByVal cBufferSize As Long)Dim sFillTest As String
sFillTest = Space$(260)
Long2String2 wParam, sFillTest, 260
我把dll放到应用程序路径下,和winsys路径下和win路径下全不行,
我用的是VB自带的打包工具,
请给出一个完整的解决方案好么?