Форма не отображается в провайдере учетных данных - PullRequest
0 голосов
/ 29 августа 2018

У меня есть функция в 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 Ответ

0 голосов
/ 30 августа 2018

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

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

HRESULT OnCreatingWindow(
    HWND *phwndOwner
);

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

public DialogResult ShowDialog(
    IWin32Window owner
);
...