У меня есть приложение C# Winforms, которое делает вызов COM-класса. При отладке с помощью Visual Studio он переходит в код C++ и возвращает S_OK, но когда функция возвращает визуальную викторину, а приложение аварийно завершает работу. Я должен завершить процесс VS-процесса, чтобы остановить запуск программы. Если я запустил приложение за пределами визуальной студии, приложение просто выйдет из строя.C# Сбой приложений при вызове метода COM Класс
Все работает нормально, и я понятия не имею, что я, возможно, сделал, чтобы вызвать эту проблему.
Любая помощь приветствуется. Благодаря
Sj
Это определение интерфейса
typedef struct
{
long ExpiryData
BSTR IssuedBy;
} LicenceData;
[
object,
uuid (5A734F95-EABE-440B-8B7E-0F73538A24AC),
pointer_default(unique),
helpstring("ILicenceReader Interface"),
]
interface ILicenceReader : IDispatch
{
HRESULT ReadLicenceFile ([in, out]LicenceData* plicenceData, LPCTSTR filePath);
};
[
uuid(C2833A21-6586-4648-ABC8-D42BC3225699)
]
coclass LicenceReader
{
[default] interface ILicenceReader;
};
Я реферированы DLL COM и Разрешенные VS для создания Interop и использование в C# приложения:
LicenceData data = new LicenceData();
ILicenceReader reader = new LicenceReader();
reader.ReadLicenceFile(ref data, filePath);
Спасибо за вашу помощь.
Возможно, вы можете предоставить подробную информацию о вызовах COM, которые вы создаете? Кроме того, информация об ОС, архитектуре ЦП (32 бит против 64 бит), скомпилированной архитектуре процессора (AnyCPU против x86) и т. Д. Может быть полезной. – Reddog
Кажется, проблема со стеклом. Не могли бы вы показать подпись вашей функции COM, как вы заявляете на C# и как вы ее называете? – Steve
Настройте отладчик для остановки в SEH (Меню-> Отладка-> Исключения для VS). Запустите приложение с приложенным отладчиком, но не используйте пошаговое выполнение. Посмотрите, какое сообщение будет отправлено –