【发布时间】:2012-04-04 22:39:39
【问题描述】:
我有一个调用 COM 类的 C# Winforms 应用程序。使用 Visual Studio 进行调试时,它会进入 c++ 代码并返回 S_OK 但是当函数返回时,Visual Studio 挂起并且应用程序崩溃。我必须结束 VS 进程上的进程才能停止程序运行。如果我在 Visual Studio 之外运行应用程序,应用程序就会崩溃。
一切正常,我不知道我做了什么导致这个问题。
感谢任何帮助。谢谢
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;
};
我已经引用了 COM dll 并允许 VS 生成 Interop 和 c# 应用程序中的用法:
LicenceData data = new LicenceData();
ILicenceReader reader = new LicenceReader();
reader.ReadLicenceFile(ref data, filePath);
感谢您的帮助。
【问题讨论】:
-
也许您可以提供有关您正在进行的 COM 调用的详细信息?此外,有关操作系统、CPU 架构(32 位与 64 位)、已编译 CPU 架构(AnyCPU 与 x86)等的信息都会有所帮助。
-
堆栈似乎有问题。您能否展示一下您的 COM 函数的签名、您如何在 C# 中声明以及如何调用它?
-
将调试器配置为在 SEH 上停止(菜单->调试->VS 异常)。在附加调试器的情况下运行应用程序,但不要使用逐步执行。查看将报告什么异常
-
我打开了所有异常,它仍然只是杀死了视觉工作室。它在 64 位 Windows 7 机器上运行。在 c# 应用程序和 COM dll 中,目标平台都是 x86。函数调用通过 ref 传回一个带有一些字符串和 int 的结构。
-
@Sjblack,向我们展示 IDL 文件以及操作中涉及的所有接口和类的对应 C# 定义