Форма не отображается в провайдере учетных данных

У меня есть функция в C#, которая отображает форму. Я показал функцию, используя Unmanaged Exports и вызывая ее из C++ в образце провайдера учетных данных по ссылке на команду. Форма не отображается (ничего не происходит). Однако когда я вызываю ту же форму C# с помощью консольного приложения C++, форма отображается без каких-либо проблем. Какая разница, что консольное приложение C++ загружает его, а код поставщика учетных данных C++ не загружает его?

Код C++:

using CSharpForm = void(__stdcall *)(wchar_t* message);
int _tmain(int argc, _TCHAR* argv[])
{
HMODULE mod = LoadLibraryA("CSharp.dll");
CSharpForm form = reinterpret_cast<CSharpForm>(GetProcAddress(mod, "form1"));
form(L"This is a c# form");
getchar();
return 0;
}

Код C#:

[DllExport(ExportName = "form1", CallingConvention = CallingConvention.StdCall)]
public static void showForm([MarshalAs(UnmanagedType.LPWStr)]string message)
{
    Form_Test form = new Form_Test();
    form.Text = message;
    form.ShowDialog();
}

1 ответ

Решение

Попробуйте это:

Вызов ICredentialProviderCredentialEvents::OnCreatingWindow метод

HRESULT OnCreatingWindow( HWND *phwndOwner );

чтобы получить дескриптор окна, передайте дополнительный параметр в вашу библиотеку и используйте перегруженный метод ShowDialog,

public DialogResult ShowDialog( IWin32Window owner )

Другие вопросы по тегам