作者在 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);
}
}
}
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 ^h = gcnew HelloUtil::Echo(str);
h->Tell();
return 0;
}
#pragma unmanaged
int _tmain(int argc, _TCHAR* argv[])
...{
abc();
return 0;
}
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 ^h = 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 后的结果: