如何从C#调用C ++ Native Properity

时间:2014-01-09 08:04:20

标签: c# c++ native-methods

我在C ++方面不太好 但,.. 例如,我有这个

#define GETSomthing_API  __declspec(dllexport)
extern GETSomthing_API int nGetSomthing;

我要像这样导入的方法

GETSomthing_API  int GetSomthing(const char* szConfigPath, char *A, int B)

我如何从C#中调用它?

旁边, 我认为我的问题在于C ++方面的参数类型(const char *),它在C#中的相同类型是什么! const char *

谢谢,

3 个答案:

答案 0 :(得分:2)

How to call C++ code from C#

Calling C++ function from C#

使用:[DllImport(“xxx.dll”)] xxx.dll是由C ++编译的

希望得到这个帮助。

答案 1 :(得分:1)

从C#调用本机代码有两种方法。最简单的可能是使用P/Invoke。 说你的功能如下:

extern "C" int nGetSomeThing(void);

并将其编译成YourDllName.dll文件,您可以使用P / Invoke从C#代码中以下列方式直接调用非托管代码:

public static class interop
{
    [DllImport("YourDllName.dll")]
    static extern public int nGetSomeThing(void);
}
...
interop.nGetSomething() // call to the native function

参考:http://msdn.microsoft.com/en-us/library/aa288468%28VS.71%29.aspx

如果您有许多具有复杂签名的函数,您应该在C ++ / CLI中寻找互操作层。 请参阅:http://www.codeproject.com/Articles/19354/Quick-C-CLI-Learn-C-CLI-in-less-than-10-minutes

答案 2 :(得分:0)

我刚刚添加了__cplusplus检查,它确实有效!

#ifdef __cplusplus

extern“C”{

ENDIF

GETSomthing_API char* GetAgentId(const char* szConfigPath, char *szA, int ASize);

ifdef __cplusplus

}