2012-04-26 188 views
6

我正在尝试在第三方基于Lisp的程序(我们称之为ABC)和我自己编写的C#程序(我们称之为DEF)之间创建一个整合。 问题是ABC只能调用在C或Fortran中创建的程序集。 所以我开始学习C,并且我得到了“hello world”测试的工作,ABC呼叫我的C dll并获得“hello world”作为回报。 我试图使用显式加载和GetProcAddress从C代码调用我的DEF dll。它工作,如果我打电话给另一个C DLL,但不是C#的DLL。 现在我不知道如果我必须学习C++和调用C C#++创建这个漂亮的调用链:如何从C代码调用C#DLL中的方法?

ABC - “ç - > C++ - > DEF(C#) - > C++ - >ç - > ABC

如果这是唯一的方法,任何人都可以帮助我一些例子等?

+1

你注册了你的C#DLL的COM互操作吗?我过去做过,这是可能的。 – SouthShoreAK 2012-04-26 14:27:23

+0

如果有问题,请不要忘记标记您的问题(勾选答案的downvote按钮下方的钩子)。 – sschrass 2012-04-27 09:24:29

回答

2

使用this project将C#函数导出为原生入口点。

+0

我其实得到了这个工作,非常感谢! – AndersJH 2012-05-11 12:23:27

3

当您创建一个.NET程序集时,可以设置一个复选框,以便为COM互操作注册 程序集。这将允许您从任何可以调用COM的语言访问它 。 (C可以不可以吗?因为我碰过C或C++,所以很长时间 )。

配置属性 - >生成你的项目属性页。 查找“注册COM Interop”。

+0

这没有奏效。 C仍然无法在dll中找到程序地址。 – AndersJH 2012-04-27 12:53:05