Using C++ dll in C# code

0. Environment

Win 8 Pro en 64bit

Visual Studio 2012 en

1. Steps

1.1. In C++ code:

//dll.cpp
extern "C" __declspec(dllexport) double __stdcall Add(double a, double b)
{……}

1.2. In C# code:

[DllImport(".\\DllTest.dll", CallingConvention = CallingConvention.StdCall)]
public static extern double Add(double a, double b);

2. How to use string as parameter and return value

//dll.cpp

//p_inFilePath is an input, and p_outFilePath is an output
extern "C" __declspec(dllexport) void __stdcall Normalizer(char *p_inFilePath, char *p_outFilePath)

//call.cs

[DllImport("PNormalizer.dll")]
private static extern void Normalizer(string inFilePath, StringBuilder outFilePath);

int len = 1024;//this number should be big enough to contain all of output char
StringBuilder outFilePath = new StringBuilder(len);
Normalizer(inFilePath, outFilePath);

3. Something you need to focus on

3.1. You should Rebuild the C++ dll project if you changed it, or you will get the same errors and results after you changed the dll code

4. References

http://hi.baidu.com/yun0216/item/f7c856d227465738e3108fa3

(This article is from http://www.cnblogs.com/chenyineng/archive/2012/12/15/2818889.html, and belongs to http://chenyineng.cnblogs.com and http://www.chenyineng.info)

原文地址:https://www.cnblogs.com/chenyineng/p/2818889.html