既懂VC又懂VB的高手请进!!
我用VC做了一个DLL,在VB下调用失败,如何解决?
DLL代码如下:
......
LPCTSTR msg = "sdhsdjifodjifofosdjijifoddjifo";
......
extern "C" __declspec(dllexport) BOOL ReadMessage(LPCTSTR& strRecv)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
strRecv = (LPCTSTR&)msg;
return TRUE;
}
在VB中声明如下:
Declare Function ReadMessage Lib "test4.dll" (ByRef strRecv
As String) As Boolean
在程序任意处调用ReadMessage(strRecv),希望能够得到DLL中msg的值。
代码如下:
Dim b As Boolean
Dim str_w As String
str_w = "VB Value"
b = ReadMessage(str_w)
但在VB的DEBUG模式下,出现“实时错误‘49’DLL调用约定错误,”的提示。
而如果我先生成EXE文件,直接执行EXE文件,则以上错误消失,但更头疼的事
情出现了!在DLL中对str_w的修改并不起作用。str_w的值在函数ReadMessage
返回后变为空。
回到VB的DEBUG状态下,发现Boolean型变量b为FALSE,也就是说ReadMessage
返回值为FALSE,进入VC的DEBUG状态,DLL中ReadMessage成功返回为TRUE。
我采用MFC正规DLL建立的工程,该DLL在VC下用静态连接方式调用是没有问题的。
但在VB下的调用却不成功。以下是我的疑点:
1.是否MFC方式建立的DLL不支持非MFC程序的调用?如果答案是支持,则下一个问题。
2.在VB调试状态下执行与生成EXE文件执行为什么不同?这也不重要。
3.我在DLL中提供的ReadMessage(LPCTSTR& strRecv)函数怎样才能够在VB中执行,
并能够在VB中得到DLL对形参值的改变。
谢谢!