我做了一个简单的测试,在控制台应用程序中使用通用对话框,一切正常。然后我尝试使用相同的代码将它放在二进制DLL中。我从Vb 6调用了我的函数,奇怪的事情已经开始发生了。
我已经尝试过调用此dll中包含的vb 6中的其他函数而没有问题。
使用通用对话框,在第一次调用时,对话框将正确显示。接下来的调用vb说它找不到dll(错误53),我必须关闭并重新打开vb 6的IDE。它只会发生在常用的对话框函数中。对于其他每种类型的代码,都不会出现此问题。
以下是代码:
C ++:
bool _stdcall FsDialog(HWND hwnd){
OPENFILENAME openFile;
wchar_t szFileName[MAX_PATH];
wchar_t szFileTitle[MAX_PATH];
int index = 0;
ZeroMemory( &openFile, sizeof(OPENFILENAME) );
openFile.lStructSize = sizeof(OPENFILENAME);
szFileTitle[0] = '\0';
szFileName[0] = '\0';
openFile.hwndOwner = hwnd;
openFile.lpstrFilter = L"Logs (*.log)\0*.log\0";
openFile.lpstrFile = szFileName;
openFile.nMaxFile = MAX_PATH;
openFile.lpstrFileTitle = szFileTitle;
openFile.nMaxFileTitle = sizeof(szFileTitle)/sizeof(*szFileTitle);
openFile.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
openFile.lpstrDefExt = L"log";
if (GetOpenFileName(&openFile)){
return(1);
}
}
VB6:
Private Declare Function FsDialog Lib "mydll.dll" (ByVal hWnd As Long) As Integer
Private Sub Form_Load()
Debug.Print FsDialog(Me.hWnd)
End Sub