这个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参数
------解决方案--------------------

------解决方案--------------------
C/C++ code

typedef unsigned short wchar_t;
typedef wchar_t WCHAR;
typedef WCHAR OLECHAR;
typedef OLECHAR* BSTR;
// 所以 BSTR 就是 unsigned short 的指针类型,即数据类型为 16 位的空间指针
// unsigned short *

------解决方案--------------------
探讨
C/C++ code

typedef unsigned short wchar_t;
typedef wchar_t WCHAR;
typedef WCHAR OLECHAR;
typedef OLECHAR* BSTR;
// 所以 BSTR 就是 unsigned short 的指针类型,即数据类型为 16 位的空间指针
// unsigned short *



如……

------解决方案--------------------
探讨
原型接口不能改的,这样内部实现都要变。vb本来就是用的宽字符,wchar_t正好。

------解决方案--------------------
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内部缺省使用宽字符是公认的事实,你可以自己去试,我在vb6用win32api都用的unicode版本,用StrPtr传递字符串地址

EvideoOpenRoom使用的是宽字符参数,它内部肯定会用宽字符处理程序,根据BSTR的名字,它很可能是和COM有关的,如果修改了参数,内部的实现都要发生很大的改变

------解决方案--------------------
我没有说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用的都是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 l……

------解决方案--------------------
vb6的自带的api声明很多都是ansi的,这是因为vb6出来时流行的还是win9x,它们的核心用的是ansi字符串