【发布时间】:2011-07-24 00:22:35
【问题描述】:
link text 的 Q/A 非常接近我正在寻找的内容,但我刚刚开始使用 C#,需要更多内容,可能还有一些关于最佳方式的提示。
我有一个我用 Javascript 为 PalmPre/webOS 编写的应用程序,其中一部分是用 C 语言编写的,目的是为了便于移植,而不是为了性能。它进行 Lear Jet 性能计算。
在 webOS 世界中,C 代码(插件)进入自己的进程,JS 有一种方法可以调用和调用 C 代码(使用“main”)来启动进程,C 可以注册入口点。然后JS可以用一些参数调用一个入口点,C代码做一个计算,然后C返回一个指向一串数字的指针给JS显示。 C 代码没有图形,没有动态内存分配等。我想本质上将 JS GUI 代码转换为 C#,并使用 C 代码对 C# 进行细微调整(#if's)来做与 JS 相同的事情Pre 现在可以了。
Answer 1/option2 我认为最好,但我不明白他所说的“你的项目与消费者项目”是什么意思,以及如何/为什么这意味着一个是 dllimport,一个是 dllexport,我不明白有一个 DLL,我只有 C 代码例程。看起来我所要做的就是用我的 C 例程替换他的“PublicFunc”,对吧?而且我可以有许多 args 说“参数”?但是没有指定返回类型,我将如何返回 C# 的答案? 'returntype' 是保留字吗?还是一个示例占位符?还是因为我没有 DLL 而偏离了轨道?顺便说一句,C 代码确实有一种编译模式,可以作为 DOS 程序独立运行以进行测试。
是否有任何简单的示例代码可以说明如何做到这一点?我现在正在下载 MS VS 2010 Express,还没有安装。也许那里有什么东西?
TIA!
【问题讨论】:
-
通过“你的项目”,他说的是C/C++ DLL项目; “消费者项目”是那些将使用 DLL 的项目。他的示例假设消费者使用 C++ 导入 DLL,但您的消费者是 C#,它具有类似(但不同)的导入机制:msdn.microsoft.com/en-us/library/aa984739%28VS.71%29.aspx
-
另外,您需要一个 C 代码的 DLL 导出,以便 C# 使用它。
returntype不是保留字;对于导出,MYPROJECTAPI(int) foo();扩展为以下文本:extern "C" int __stdcall __declspec(dllexport) foo();。returntype参数是愚蠢的,因为返回类型不必在__stdcall __declspec之前。您实际上可以完全从宏中删除参数并像这样使用它:MYPROJECTAPI int foo(); -
如果我没看错的话,那个 msdn 链接是用于 C++->C 链接的,有没有类似的东西来说明 C#->C 的神奇咒语细节?
-
哦,你是对的。无论如何,C# 也使用
DllImport属性。这是一个带有 C#/C 示例的链接(滚动到底部):csharphelp.com/2006/12/c-tutorial-for-beginners -
是的,这更像它!当我需要它时,我将不得不消化它。我很惊讶他们会在初学者教程中包含一个 C#/C 链接示例,听起来这是很常见的事情。