![]() |
1
2
IIRC,你需要用一个调用约定来修饰代理签名。不幸的是,这只能通过IL或使用Reflection.Emit生成存根来完成。
|
![]() |
2
8
我知道这个问题已经存在一年了,但是比动态构建类型更简单的方法是使用
从 MSDN |
![]() |
3
-1
有两件事需要注意:C#位和DLL之间的调用约定,以及char*数据如何通过这个接口进行封送。如果你弄错了其中任何一个,那么你就会收到一堆腐败投诉。在定义接口时,如果可以将数据块的大小限制为某个固定值(即设置最大字符串长度),那么就容易多了。 这是静态版本,其中DLL名称是固定的,字符串作为byte[]处理,大小限制为2Kbyte,您可以通过以下公式计算出动态版本:
如果要保留字符类型,可能还需要指定正在使用的字符集,如上所述。 如果你的char数据是作为参数进入C++代码或者C++代码通过它返回托管的世界,那么你就不用说你在做什么。阅读C#关键字ref和out,作为避免char*类型和不安全修饰符的方法。 用谷歌搜索一下,你应该能找到答案。 |
![]() |
Yanshof · 如何获取C#对象上的非托管指针? 7 年前 |
![]() |
mll5 · 使用stringbuilder编组发出非托管调用 11 年前 |
![]() |
Marvin · 是否可以使用委托函数从非托管代码引发.Net异常? 11 年前 |
![]() |
Matthew Layton · 将非托管数据映射到.NET中的托管结构 12 年前 |