c#调用c++写成的dll文件,返回char*,返回数组,用ref接收,byte[]
2008-06-02 18:07 Virus-BeautyCode 阅读(12989) 评论(0) 编辑 收藏 举报// Inclusion guard
#ifndef _DLLTUT_DLL_H_
#define _DLLTUT_DLL_H_
// Make our life easier, if DLL_EXPORT is defined in a file then DECLDIR will do an export
// If it is not defined DECLDIR will do an import
#if defined DLL_EXPORT
#define DECLDIR __declspec(dllexport)
#else
#define DECLDIR __declspec(dllimport)
#endif
// Specify "C" linkage to get rid of C++ name mangeling
extern "C"
{
// Declare 2 functions
DECLDIR int Add( int a, int b );
DECLDIR void Function( void );
DECLDIR void GetPrt( char * prtStr );
}
// End the inclusion guard
#endif
起因是,我想让c++的同事给我一个读取硬件编号的函数,没有参数,返回值是编号,可是我的同事说返回string不规范,返回结果应该是true或者false,然后利用参数返回值,就是利用指针返回编号,他就写了一个方法,我找了一些方法试验了一下,下面这种可行,希望给大家一点提示吧。
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace ConsoleApplication30
{
class Program
{
static void Main(string[] args)
{
test.Function();
Console.WriteLine("result: " + test.Add(2, 3).ToString());
//string str = "aaddddddddddd";
byte[] str = new byte[12];
test.GetPrt(ref str[0]);
Console.WriteLine(System.Text.Encoding.GetEncoding("GB2312").GetString(str));
Console.ReadLine();
}
}
class test
{
[DllImport("..\\..\\lib\\DLLTest.dll")]
public static extern void Function();
[DllImport("..\\..\\lib\\DllTest.dll")]
public static extern int Add(int i,int j);
[DllImport("..\\..\\lib\\DllTest.dll")]
public static extern void GetPrt(ref byte prtStr);
}
}
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace ConsoleApplication30
{
class Program
{
static void Main(string[] args)
{
test.Function();
Console.WriteLine("result: " + test.Add(2, 3).ToString());
//string str = "aaddddddddddd";
byte[] str = new byte[12];
test.GetPrt(ref str[0]);
Console.WriteLine(System.Text.Encoding.GetEncoding("GB2312").GetString(str));
Console.ReadLine();
}
}
class test
{
[DllImport("..\\..\\lib\\DLLTest.dll")]
public static extern void Function();
[DllImport("..\\..\\lib\\DllTest.dll")]
public static extern int Add(int i,int j);
[DllImport("..\\..\\lib\\DllTest.dll")]
public static extern void GetPrt(ref byte prtStr);
}
}
记录一些有用的链接吧
http://www.cnblogs.com/wantfei/archive/2004/06/16/16194.html
http://www.cnblogs.com/wy/articles/123656.html
http://dotnet.csdn.net/page/aab1def7-35a4-4a5f-bd18-c82879278b22
http://www.liuwu.net/post/how-to-passing-structures-and-classes-to-unmanaged-code.aspx
http://www.cnblogs.com/oceanlzhang/archive/2007/09/18/897698.html
http://www.blue1000.com/bkhtml/2007-12/55484.htm
http://www.cnblogs.com/songwin/articles/1329545.html
最近老是碰到问题啊,提示“无法加载 DLL“FUKeyDll.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。”,
这个问题也被解决了,多半是因为FUKeyDll.dll调用了其他的dll文件,缺少了其他的dll文件