日期:2014-05-18  浏览次数:20863 次

C#调用C++的dll,继续问,可另外开贴送分(急,在线等)
问题情景: 

1、数据库访问的底层操作,我是自己写的数据库类,语言C++ ,用到了stl中的vector,string
2、web page用的是C# 

问题: 

C#中,如何调用C++的内容,C++中的函数,我知道用dllimport的方式,可以将dll导入使用,可是对于在C++中,自己定义的类,如何在C#中使用呢?? 

希望的解决方式: 

给出C#调用C++的部分代码,其中C++中,用到了vector,string,是自己定义的类,以及结构体

此外的我的数据库操作有多个类
底层:数据库操作类
中间:数据表映射类(多个)
上层:统一封装接口类,所以怎么封装比较好呢?

本人初次接触这个问题,请尽量详细点吧,觉得分不够,可以另外开贴送分。 


------解决方案--------------------
我给你找个例子,创建com组件,大部分代码都是生成的.

________________________________________________________

[
object,
uuid("E6A596F0-01DB-4D35-83FD-C5FD09F21696"),
dual, helpstring("IEeaCli Interface"),
pointer_default(unique)
]
__interface IEeaCli : IDispatch
{
HRESULT Create ( [in] BSTR src_filename,[out,retval] BSTR * stb_filename );
HRESULT Open ( [in] BSTR stb_filename ); 
HRESULT SetClientID ( [in] BSTR clientid );
HRESULT GetClientID ( [out,retval] BSTR *clientid );
HRESULT SetHashCode ( [in] BSTR hashcode );
HRESULT GetHashCode ( [out,retval] BSTR * hashcode );
HRESULT SetTargetPath ( [in] BSTR src_file_name );
HRESULT GetTargetPath ( [out,retval] BSTR * src_file_name );
HRESULT GetTargetFileInfor([out,retval] IEeaFileInfo** ifinfo );
HRESULT SetTargetFileInfor([in] IEeaFileInfo * ifinfo );

};

你使用标准的com ,在注册后,用vs的添加引用-->com引用就可以.

我说的那个写成函数库自己写封送那太罗嗦了,封送没个统一的标准,100人封100个样出来.