我遇到了客户端获得“C”程序的情况,该程序在客户端应用程序端对列进行加密。现在,在支持C#的脚本组件之一的DataWarehousing项目中使用它。
有没有办法将这个C程序编译成dll并导入到C#[或]我们是否需要在C#中重写它?
由于
答案 0 :(得分:3)
如果客户端的代码已经在DLL中,则可以使用C#中的P \ Invoke来使用它中的所有例程。这是tutorial。
答案 1 :(得分:1)
混合托管(c#)和非托管(c)代码并不太难,C#有一个很棒的功能pinvoke来执行此操作,还可以查看有关托管和非托管代码接口的this tutorial,然后你可以将dll编译为普通的C dll
答案 2 :(得分:1)
它可以编译为dll,但您可能需要对源代码进行一些更改。看看this tutorial。要在C#中使用你的dll,请查看P / Invoke here。这应该足以让你前进。
答案 3 :(得分:1)
是的,这是可能的。
在visual studio中创建一个新的win32 dll项目。假设你想创建一个名为sum的C方法,并通过dll使其可用。首先,您创建方法:
int _stdcall sum(int x , int y)
{
return x+y;
}
如果VS没有创建.def文件(它应该这样做),那么创建一个.def文件并在该文件中写下以下内容:
LIBRARY Example
DESCRIPTION Example library for C
EXPORTS
sum @1
这将在加载dll时创建一个名为sum的可访问方法。现在,您必须使用DLLImport在C#项目中编译和使用它。
答案 4 :(得分:0)
我没有使用P / Invoke,而是发现创建C ++ / CLI类库项目更容易,您可以用C ++代码编写托管C代码的托管类。然后从C#项目中添加对类库的引用,并直接调用包装类。