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

Ione 2010-06-20 12:04:13
第一个问题 :

如何向 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#新手 , 不好意思 ,拜托一下 , 谢谢













...全文
167 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ione 2010-06-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lin421204266 的回复:]

看不懂,接点分
[/Quote]

不会吧 , 就是想在dll 中 通过回调 Asp.net 来的输出网页内容
lin421204266 2010-06-20
  • 打赏
  • 举报
回复
看不懂,接点分

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧