【发布时间】:2013-07-02 17:16:59
【问题描述】:
我有一个在 c++ 项目中使用的 com dll。我没有注册 dll,但它在同一个解决方案中。我的应用程序不断中断,我发现它在这里中断了
hr = CoCreateInstance(rclsid, pOuter, dwClsContext, __uuidof(IUnknown), reinterpret_cast<void**>(&pIUnknown));
因为我没有具有该 guid (rclsid) 的 com 类。我做了更多的挖掘,发现它从临时目录中的 .tlh 文件中获取 guid,但 guid 与我的代码不同。
.tlh 文件
struct __declspec(uuid("b10a18c8-7109-3f48-94d9-e48b526fc928"))
DocMapEntry;
// [ default ] interface _DocMapEntry
// interface _Object
// interface IDocMapEntry
c#代码(comvisable dll)
[ComVisible(true)]
[Guid("E98676B9-1965-4248-A9B6-74EC5EE5385A")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IDocMapEntry
{
int Offset { get; set; }
int PageOffset { get; set; }
int PageNumber { get; set; }
}
我尝试将值更改为正确的值,但它不断更改,Visual Studio 要求我重新加载。
当我使用 com explorer 查看课程时,我得到了一个不同的 clsid,当我尝试取消注册它时,它成功完成,但项目仍然存在并且文件位置是 mscoree。
我的 c++ 应用程序使用 .tlh 文件中的 guid,但没有找到该文件。
public class DocMapEntry : IDocMapEntry
{
...
}
我的问题是。
我需要注册我的 com dll 才能使用吗? 如何设置课程的指导? 为什么它会创建一个带有错误 guid 的临时 .tlh 文件? (选修的) 为什么我不能更改此文件? (可选)
谢谢。
【问题讨论】:
标签: c++ visual-studio-2008 com