【转】在非托管的 VC++2005 中调用托管的 C# DLL 文件

作者在 2008-10-31 13:53:36 发布以下内容

编写托管的 C# DLL 文件
1. 先要写一个 C# 程序,如下所示: 

using System;

namespace
 HelloUtil
{
    
public class
 Echo
    
{
        
string
 myString;

        
public Echo(string
 aString)
        
{
            myString 
=
 aString;
        }


        
public void Tell()
        
{
            Console.WriteLine(myString);
        }

    }

}

2.编译成 DLL 文件
从开始菜单中找到"Visual Studio 2005 命令提示"并打开它, 在其中输入命令
csc /nologo /t:library /out:echo.dll echo.cs
即可编译出 echo.dll 文件.

在 VC++2005 中调用
1. 新建工程
在 VC++2005 中新建一个 "Win32 控制台应用程序" 的工程,在向导中把"预编译头"前面的勾去掉,即不使用预编译头, 完成向导. 在这里,我新建的工程名为 MyNet

2.让工程支持 CLR
项目 -> 属性 -> 配置属性 -> 常规 -> 公共语言运行库支持
选择"公共语言运行库支持(/clr)"

3.默认使用非托管的方式
在 stdafx.h 文件中最后一行输入
#pragma unmanaged

4. 主要源程序

/* -------------------------------------
MyNet.cpp  -- Unmanaged C++ code calling Managed C# DLL File
(C) Wang Guofan 2006-12-20
------------------------------------- 
*/

#include 
"stdafx.h"

#include 
<comdef.h>
#
using <System.dll>
using namespace System;

#
using "echo.dll"

#pragma managed
int abc()
{
    System::String 
^str = "Hello my 1st C# object !"
;

    HelloUtil::Echo 
^=
 gcnew HelloUtil::Echo(str);
    h
->
Tell();
    
return 0
;
}


#pragma unmanaged
int _tmain(int argc, _TCHAR* argv[])
{
    abc();
    
return 0
;
}

5. 编译
把编译好的 C# DLL 文件 copy 到 MyNet 工程目录中,编译,应该可以顺利通过,生成一个 MyNet.exe 文件。
注意: 由于程序中我引用 dll 是用 #using "echo.dll" , 因此要把 C# DLL 文件 copy 到 MyNet.exe 所在的目录里,这一步要看清楚,否则,会运行不了。
6. 运行
在 _tmain 里的 return 0 那儿设置一个断点,再按 F5 调试运行,将会在 Command 窗口里看到调用 C# DLL 后的结果:

资料 | 阅读 6309 次
文章评论,共0条
游客请输入验证码
浏览17178次
文章分类
最新评论