У меня есть функция в 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();
}
Попробуйте это:
Вызов ICredentialProviderCredentialEvents::OnCreatingWindow
метод
HRESULT OnCreatingWindow(
HWND *phwndOwner
);
чтобы получить дескриптор окна, передайте дополнительный параметр в вашу библиотеку и используйте перегруженный метод ShowDialog
,
public DialogResult ShowDialog(
IWin32Window owner
)
Других решений пока нет …