有关 C# 使用 c++ 的 void* 类型参数的两个问题 ,高手请进.

Ione CSDN会员 Ione 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
第一个问题 :

如何向 dll 传递 ASP.NET C# 对象 , dll 不使用该对象 , 只是回调时以参数形式返回改对象 . 大概的代码如下

--------------- c++ dll 接口的代码 ----------------

typedef void TCallBackFunction(void *Param);

//Param 为传进来的C#对象

extern "C" __declspec(dllexport) void __stdcall do_callback(TCallBackFunction *callback , void *Param)
{
callback(Param);
}


----------------c# 部分代码 ----------

......

public struct TypeA
{
public System.Web.HttpContext context;
public string otherdata;
}

//定义回调函数类型
delegate void CBF(TypeA obj)

//回调函数
delegate void callbackfunction(TypeA obj)
{
obj.context.Response.Write("call back here.");
obj.context.Response.Write(obj.otherdata);
}

[DllImport("mydll.dll")]
static extern void do_callback([MarshalAs(UnmanagedType.FunctionPtr)] CBF callbackfunc , [MarshalAs(UnmanagedType.LPStruct)] TypeA param);

... ...

//C# 调用的时候
TypeA param = new TypeA();
param.context = this.context;
param.otherdata = "test";

//此处产生异常
do_callback(callback_function , param);


第二个问题 :

dll 中返回 void * 是可变的数据结构 , 不知在c#中如何定义 dll 接口 .

extern "C" __declspec(dllexport) void __stdcall do_callback(int datatype, void *Data)

比如 :

datatype = 0 , Data 是一个 null 结束的字符串 , 相当于 char * buf;
datatype = 1 , Data 是一个 DWORD * 指针 , 相当于 DWORD * rect;
datatype = 2 , Data 是一个 RECT * 指针 , 相当于 RECT * rect;

等等

C# 定义成如下 不知行不 :

[DllImport("mydll.dll")]
static extern void do_callback(int datatype , IntPtr Data);

如果可以 , IntPtr 如何转成别的数据类型 , 特别是转成自定义的结构体 ,比如
public struct mystru
{
public int a;
public string b;
}

c#新手 , 不好意思 ,拜托一下 , 谢谢













...全文
评论 2
收藏 已收藏
分享
返回顶部
Ione CSDN会员
.NET社区 62,273 成员 668,968 内容