zoukankan      html  css  js  c++  java
  • 在C++ 中 如何调用 C# 写的DLL(转载)

    对于很多和我一样的老C++程序员来讲,如果不能与时俱进,不但会倍感失落,还会真的自绝于天下。
       比如C#有很多好的组件,
    如NPOI
    ,如。。。,怎么在C++中也自如调用呢,这样不用去学习C#,不用换刀,也可以达到同样的目的。
    网上看了半天,找到的资料要么太老,要么不对,干脆自己调试一遍。下面把体会说一说。
    调试环境:visual
    studio 2010 .
    时间:2012.12.20

    一、C#写的类库:


    using
    System;
    using System.Collections.Generic;
    using
    System.Text;

    namespace ClassLibrary1
    {
        public
    class Class1
       
    {
            public String
    Name
           
    {
               
    get;
               
    set;
           
    }
            public void
    helloWorld()
           
    {
               
    Console.WriteLine("hello world!");
           
    }

        }
    }

    // C#程序配置,一定是类库
    在C++ <wbr>中 <wbr>如何调用 <wbr>C# <wbr>写的DLL




    二、C++
    程序
    共有三个程序文件

    (1) 主程序
    // test1.cpp :
    定义控制台应用程序的入口点。
    //
    ///

    //
    //  在C++ 项目属性 [配置]-[常规]
    中,公共语言运行时支持,一定要选择“公共语言运行时支持”
    //
    #include "stdafx.h"
    #include
    "yotopcompany.h"

    #using
    "..ClassLibrary1inDebugClassLibrary1.dll"          
    //引用C#类库
    using namespace ClassLibrary1;       
            // 声明命名空间,非必须
    int _tmain(int argc,
    _TCHAR* argv[])
    {
        printf("hello
    world");

        ClassLibrary1::Class1 ^c = gcnew
    ClassLibrary1::Class1();   //注意一定要用 ^  ,
    一定要用gcnew
        c->Name =
    " xignxianghong";
        printf("%s ",
    c->Name);
        c->helloWorld();
       
    YotopCompany ^a  = gcnew YotopCompany("a","b","c");
       
    printf("%s,%s,%s",a->name,a->address,a->phoneNumber);
       
    getchar();
       
        return 0;
    }
    (2) c++
    中自己编写的一个类
    // yotopCompany.h

    #pragma once
    ref class
    YotopCompany
    {
    public:
       
    YotopCompany(void);
        YotopCompany(char* name,char*
    address,char* phoneNumber);

        char* name
    ;
        char* address;
        char* 
    phoneNumber;
    };


    (3)
    c++编写的类的CPP文件
    //yotopcompany.cpp

    #include "StdAfx.h"
    #include
    "YotopCompany.h"


    YotopCompany::YotopCompany(void)
    {
       
    name = "yotop";
        phoneNumber = "12345678"
    ;
        address =
    "北京";
    }
    YotopCompany::YotopCompany(char*_name ,char* _address,char*
    _phoneNumber)
    {
        name = _name;
       
    address = _address;
        phoneNumber = _phoneNumber
    ;
    }

    (4) c++ 程序配置



    在C++ <wbr>中 <wbr>如何调用 <wbr>C# <wbr>写的DLL



    三、如果还有疑问,请参考
    MSDN 文章:
    // How to call a managed DLL from native Visual C++ code in Visual
    Studio.NET or in Visual Studio 2005
    // 如何在 Visual Studio.NET 或 Visual Studio
    2005 中的本机 Visual C++ 代码中调用托管的 DLL
    //  http://support.microsoft.com/kb/828736

    四、总结:
    1)用C#写任何的类库
    2)C++
    中要引用此类库
    3)创建C#对象时要用gcnew ;
    4) C++ 编译设置一定设置为:支持公共语言运行时支持(/clr)
    4) 自身的C++类要用 ref class
    定义。
     希望关心上述主题的朋友能够如愿以偿,GOOD LUCK!

  • 相关阅读:
    如何在ASP.NET中使用div弹出窗口
    How to avoid error "LNK2001 unresolved external" by using DEFINE_GUID
    一个JavaScript实现的幻灯片程序分析
    Systems Thinking in Project Management
    CSS
    How To Clear Floats Without Structural Markup
    Public Symbols and Private Symbols
    DOM and CSS positioning
    JavaScript对象模型执行模型
    JavaScript 操作图片
  • 原文地址:https://www.cnblogs.com/ankeyliu/p/4488211.html
Copyright © 2011-2022 走看看