Я сделал простой тест использования общего диалога в консольном приложении, и все работало правильно. Затем я попытался использовать тот же код, поместив его в двоичную DLL. Я вызвал свою функцию из Vb 6, и странные вещи начали происходить.
Я уже пытался без проблем вызвать другие функции из vb 6, содержащиеся в этой dll.
При обычном диалоге при первом вызове диалог отображается правильно. Следующие вызовы vb говорят, что он не может найти dll (ошибка 53), и мне нужно закрыть и снова открыть IDE vb 6. Это происходит только с использованием общих функций диалога. Для любого другого типа кода эта проблема не возникает.
Вот код:
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