c#调用C、C++编写的dll

用c++编写了一个dll,现在要供c#调用,在c++中调用的格式为:typedefvoid(*CALLBACKF)(char**,int,double,char**);t... 用c++编写了一个dll,现在要供c#调用,

在c++中调用的格式为:

typedef void (*CALLBACKF) (char **, int, double, char **);

typedef bool (*FUN)(char *, double , double , double , CALLBACKF, int);

dll=LoadLibrary(dllLocation);
FUN fun1=(FUN)GetProcAddress(dll, "fun");

在c#中如何实现?谢谢~
我需要的是如何输入输出 数组,题中的是char数组,包括一维和多维,我是这样写的

c中的callback在c#中如何实现?
展开
 我来答
negativist
2008-07-22
知道答主
回答量:23
采纳率:0%
帮助的人:0
展开全部
此示例使用 C 程序创建一个 DLL,在下一示例中将从 C# 程序调用该 DLL。
// cmdll.c
// compile with: /LD
int __declspec(dllexport) SampleMethod(int i)
{
return i*10;
}

该示例使用两个文件 CM.cs 和 Cmdll.c 来说明 extern。C 文件是示例 2 中创建的外部 DLL,它从 C# 程序内调用。
// cm.cs
using System;
using System.Runtime.InteropServices;
public class MainClass
{
[DllImport("Cmdll.dll")]
public static extern int SampleMethod(int x);

static void Main()
{
Console.WriteLine("SampleMethod() returns {0}.", SampleMethod(5));
}
}

参考资料: MSDN

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
808龙茂林
2008-07-22
知道答主
回答量:11
采纳率:0%
帮助的人:0
展开全部
将该DLL文件复制到C#的BIN下面就可以了撒
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友0f3f080f4
2008-07-22 · TA获得超过777个赞
知道小有建树答主
回答量:1055
采纳率:0%
帮助的人:804万
展开全部
回调函数我用过,

定义这个typedef void (*CALLBACKF) (char **, int, double, char **);
回调函数
using System.Runtime.InteropServices;
class API
{
[UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)]
//上面这个可能不要 可能要,具体看你这个回调函数的调用方式是cdecl调用还是其他。
public delegate void ChCallback(参数自己一一对应);

[DllImport("Cmdll.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
public static extern bool FUN(char *, double , double , double ,ChCallback CallBack,int );
参数自己对应写,我的意思是自己定义一个delegate 对应C++ 中的CALLBACKF 然后再放到 fun参数里

}
然后其他类里实例api这个类后
pcallback = new API.ChCallback(MTEvent);
MTEvent为事件处理函数 意思就是typedef void (*CALLBACKF) (char **, int, double, char **);
这个在C#的具体回调实例!
public MTEvent(char **, int, double, char **)'

char 数组用 string接受

char *,这样定义

int len=128;
IntPtr cha = Marshal.AllocHGlobal(len);
len中间的len你自己看分配多少内存!cha 这就是一个指针。就是指向你分配的一块内存,然后把这个指针传递进去!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式