这个DLL中的函数原型,VB中该怎么引用
这个DLL中的函数原型,VB中该如何引用?
有个DLL 中的函数原型:
extern "C" bool __declspec(dllexport) __stdcall EvideoOpenRoom(BSTR RoomIP, BSTR ServerIP, int iFlag)
如果用VB 来引用这个函数,该如何定义呢?
Public Declare Function EvideoOpenRoom Lib "SendWineEV.DLL" (ByVal strRoomIP As String, ByVal strServerIP As String, ByVal nFlag As Long) As Long
定义为这样,始终通不过,请给点参考建议,十分感谢~~
------解决方案--------------------
Public Declare Function EvideoOpenRoom Lib "SendWineEV.DLL" (ByVal strRoomIP As Long, ByVal strServerIP As Long, ByVal nFlag As Long) As Long
调用时用StrPtr传递BSTR参数
------解决方案--------------------
------解决方案--------------------
有个DLL 中的函数原型:
extern "C" bool __declspec(dllexport) __stdcall EvideoOpenRoom(BSTR RoomIP, BSTR ServerIP, int iFlag)
如果用VB 来引用这个函数,该如何定义呢?
Public Declare Function EvideoOpenRoom Lib "SendWineEV.DLL" (ByVal strRoomIP As String, ByVal strServerIP As String, ByVal nFlag As Long) As Long
定义为这样,始终通不过,请给点参考建议,十分感谢~~
------解决方案--------------------
Public Declare Function EvideoOpenRoom Lib "SendWineEV.DLL" (ByVal strRoomIP As Long, ByVal strServerIP As Long, ByVal nFlag As Long) As Long
调用时用StrPtr传递BSTR参数
------解决方案--------------------
------解决方案--------------------
- C/C++ code
typedef unsigned short wchar_t; typedef wchar_t WCHAR; typedef WCHAR OLECHAR; typedef OLECHAR* BSTR; // 所以 BSTR 就是 unsigned short 的指针类型,即数据类型为 16 位的空间指针 // unsigned short *
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
vb6内部缺省使用宽字符是公认的事实,你可以自己去试,我在vb6用win32api都用的unicode版本,用StrPtr传递字符串地址
EvideoOpenRoom使用的是宽字符参数,它内部肯定会用宽字符处理程序,根据BSTR的名字,它很可能是和COM有关的,如果修改了参数,内部的实现都要发生很大的改变
------解决方案--------------------
试试:
Public Declare Function EvideoOpenRoom Lib "SendWineEV.DLL" (strRoomIP As Any, strServerIP As Any, ByVal nFlag As Long) As Long
Dim strServerIP() As byte, strRoomIP() As byte
The WideString type represents a dynamically allocated string of 16-bit Unicode characters. In most respects it is similar to AnsiString. On Win32, WideString is compatible with the COM BSTR type.
所以,widestring 与vb6中的string相同,但是在vb6调用api时,会自动将string中的unicode转化为ansi。用byte数组可以避免这样的转换。
------解决方案--------------------
------解决方案--------------------
我没有说vb6用的都是unicode的api,我是说我用vb6编程时都用unicode api,你看清楚点
比如我要弹出对话框,我就
declare function MessageBoxW lib "user32.dll" (byval hwnd as long,byval txt as long,byval caption as long,byval flags as long) as long
然后MessageBoxW 0,StrPtr("aaa"),0,0
vb6的String默认是unicode,这是正确的,看这里
http://msdn.microsoft.com/en-us/library/aa261360(VS.60).aspx
BSTR通常为COM所用,在windows中用来放宽字符,详情见
http://msdn.microsoft.com/en-us/library/ms221069.aspx
------解决方案--------------------
------解决方案--------------------
vb6的自带的api声明很多都是ansi的,这是因为vb6出来时流行的还是win9x,它们的核心用的是ansi字符串