小智 2
我假设您的C#类是静态类。您需要先在C++/CLI中创建互操作层,然后才能在纯C中使用它。创建一个C++/CLI类来包装您的C#类。完成后,使用导出函数导出特定的C函数。C++/CLI 将代表您管理互操作。经验法则是,如果您的类/函数有任何 CLI,那么它就是 CLI。因此,您的外部函数应该只返回本机数据类型。
extern "C" __declspec( dllexport ) int MyFunc(long parm1);
Run Code Online (Sandbox Code Playgroud)
这是一篇帮助您入门的文章。它将C++转换为C#,但在您的情况下该过程是相反的。CodeProject不幸的是,没有针对纯C的方便的反向PInvoke。
不幸的是我从未从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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
所有文件都位于同一解决方案但不同的项目中。我已经确认这有效。我希望这对遇到它的人有所帮助。
干杯!
| 归档时间: |
|
| 查看次数: |
438 次 |
| 最近记录: |