c++托管使用c#动态库

拿来一个dll,是c#编译的,我在c++程序中需要使用该dll,网上查了相关资料,需要用到 c++托管相关知识,即CLR公共语言时运行环境。具体使用步骤如下:

          1.拷贝dll到工程运行目录下。
    2.引用:
           #using \"..\\debug\\CTest.dll\"
         using namespace CTest;  
         如果 程序中引用了 其他.net组建的程序集,根据提示进行引用。例如缺少:程序集“System.Windows.Forms 则添加 #using <System.Windows.Forms.dll>
     3.项目属性,修改“公共语言运行时支持”为 "/clr".
  4.托管对象使用:
              ClassName ^p = gcnew ClassName();
                p->Fun();  // 调用dll的函数

         //delete p;
               通过gcnew来实例化,无需使用delete来释放内存,gcnew出来的内存由
         虚拟机托管,程序结束后,会自动销毁。

           5.如果dll提供的接口,需要注册回调。则语法和c#注册回调语法一样

  如:

       c#里回调函数定义如下 :
  namespace CTest
  {
  public class ClassName : UserControl
  {
    public ClassName();
    public event ClassName.DataReceive myDataReceive;
    public delegate void DataReceive(int iDoor, string sOPtag);
  }
       }

        则回调设置方法:       

p->myDataReceive += gcnew ClassName::DataReceive(GetAccessMsg); 

    GetAccessMsg 定义如下:

  1. void GetAccessMsg(int iDoor, System::String^ sOPtag))  
  2. {  
  3.     // 把 System::String^ 类型转换成 char*   
  4.     IntPtr sptr = System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(sOPtag);  
  5.     char* pMsg = (char*)sptr.ToPointer(); cout<<iDoor<<endl; }  

转自:http://blog.csdn.net/chao360559040/article/details/7570307

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值