我有一个以C语言编写的遗留应用程序,我想逐步将一些代码移到C#中。但在能够重写所有内容之前,我只需要在c#中首先编写几个将要从C中使用的组件。如何从纯C应用程序重用.Net程序集
5
A
回答
2
我假设你的C# class是一个静态类。您需要在C++/CLI中创建一个互操作层,然后才能在纯C中使用它。创建一个C++/CLI类来包装您的C#类。完成后,使用导出功能导出具体的功能C函数。 C++/CLI将代表您管理互操作。经验法则是如果你的class/function有任何CLI,它将是CLI。所以你的外部函数应该只返回本地数据类型。
extern "C" __declspec(dllexport) int MyFunc(long parm1);
这是一篇帮助您入门的文章。它将C++转换为C#但是这个过程在你的情况下是相反的。 CodeProject不幸的是,没有方便的反向PInvoke纯C。
不幸的是,我从来没有从C#到C。这听起来像一个有趣的项目。祝你好运!
好的如果你还没有弄清楚,我有一个快速的样本给你。
C#CSLibrary.Math.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CSLibrary
{
static public class Math
{
static public int Add(int a, int b)
{
int c = a + b;
return c;
}
}
}
.cpp的/ C++项目CPPCLibrary.h(编译与C++/CLI期权项目依赖)
#pragma once
using namespace System;
extern "C" __declspec(dllexport) int MathAdd(int a, int b)
{
return CSLibrary::Math::Add(a, b);
}
C++项目CTEST .c(编为C代码)
#include "stdafx.h"
#pragma comment(lib, "../Debug/CPPCLILibrary.lib")
extern __declspec(dllimport) int MathAdd(int a, int b);
int _tmain(int argc, _TCHAR* argv[])
{
int answer = MathAdd(10, 32);
_tprintf(_T("%d\n"), answer);
return 0;
}
所有文件都在相同的解决方案,但不同的项目。我已经证实这个工作。我希望这有助于任何遇到它的人。
干杯!
0
如果代码是纯C,则可以将它放入Visual C++组装项目没有太多困难。从那里,你可以访问一个常规的.net api。
如果我有一些时间,我想创建一个小的演示。这听起来很有趣。 – 2010-11-09 23:01:07