C# 如何向Visual Studio C+;创建的COM.dll添加新函数+;ATL项目
我试图创建一个非常基本的COM DLL,用于包含在C++项目中,然后使用它将一些C++功能封装到COM模块中,以包含在C代码项目中(其余代码库使用的语言)。 我包括了COM dll,向COM dll添加了一个类,并在C#代码中对其进行了实例化,但到目前为止,我还无法向新类添加新功能 以下是我所做的:C# 如何向Visual Studio C+;创建的COM.dll添加新函数+;ATL项目,c#,c++,com,interop,C#,C++,Com,Interop,我试图创建一个非常基本的COM DLL,用于包含在C++项目中,然后使用它将一些C++功能封装到COM模块中,以包含在C代码项目中(其余代码库使用的语言)。 我包括了COM dll,向COM dll添加了一个类,并在C#代码中对其进行了实例化,但到目前为止,我还无法向新类添加新功能 以下是我所做的: 新的Visual C#Windows窗体应用程序 右键单击解决方案->添加->新建项目 添加新VisualC++ + ATL项目(称为MyCOMDLL) 在ATL项目向导中选择的默认选项(我还尝试勾
非常感谢您的帮助。您是否再次将新的dll版本复制到C#项目中 我尝试向MyCOMObject.h添加一个类方法 这还不够好。项目中最重要的文件是.idl文件(接口描述语言)。该文件生成嵌入DLL的类型库。类型库是.NET用来生成托管导入库的。您添加的函数将不在其中,因为您没有修改.idl文件
修改界面是一件痛苦的事情,如果你手工操作,有三个地方需要编辑。.idl、.h和.cpp文件。最好使用向导来完成。在“类视图”窗口中,右键单击接口(如IFoo)、添加、添加方法(或属性)。然后切换到.cpp文件以写入方法的实现。尝试从C#项目中删除引用,删除生成的Interop.mycmdllib.dll并重新添加引用。在构建并添加到C#项目之前,还尝试在.dll中添加函数和变量。这两种情况都没有乐趣。值得一试。您可能在COM注册方面遇到问题。您通常需要为COM注册dll,我认为只有在您也使用C构建dll的情况下,C才会自动注册。谢谢Sogger的建议。不幸的是,我很确定这不是注册问题。我之前确实遇到了一些与注册相关的问题。将C#项目设置为针对x86构建,并(之前未提及)以管理员身份运行VisualStudio,这就解决了这些问题。我认为如果不注册COM dll,我无法在运行时实例化该类。我想您可以通过以前注册的接口的旧版本实例化您的类,这可以解释您的问题。非常有效,谢谢!成功地使用向导添加了在C#app中可见的方法和属性,不过作为其他人的参考,在添加方法/属性时,您需要删除以前生成的interop DLL。
MyCOMDLLLib.MyCOMObjectClass myVariable = new MyCOMObjectClass();
// CMyCOMObject
class ATL_NO_VTABLE CMyCOMObject :
public CComObjectRootEx,
public CComCoClass,
public IDispatchImpl
{
public:
CMyCOMObject()
{
}
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}