marshalling相关内容
我写周围写在C ++ \ CLI的托管组件的本机包装。 我在管理code以下功能: 阵列和LT;字节> ^类::函数(); 我想从一个本地C暴露该功能++类具有以下签名: shared_array< unsigned char型>类::函数(); 我已经得到了尽可能调用从本地code中的管理功能,但我不知道如何安全地复制管理的阵列到非托管的。 gcro
..
我想读的本机结构为利用编组C#类型。我的方法元帅结构是像这样: T的readObject< T>(BR BinaryReader在){ VAR字节= br.ReadBytes(Marshal.SizeOf(typeof运算(T))); VAR手柄= GCHandle.Alloc(字节,GCHandleType.Pinned); 尝试 { 返程
..
键入classType所= typeof运算(SomeClass的); 布尔等于= Marshal.GenerateGuidForType(classType所)== classType.GUID; 我还没有发现这种失败的条件的情况下。 所以为什么以及何时我应该使用的仅仅让元帅方法,而不是在的GUID 属性? 解决方案 看 ... GenerateGuidForType提供相同的功
..
我有以下签名的C函数: INT my_function(INT N,结构选手**球员) 播放器是一个指向数组的指针,以结构球员的对象。 N 是数组中指针的个数。该函数不修改数组,也不是结构的内容,并返回后,不保留任何指针。 我试过如下: [的DllImport(“mylibary.dll”) 静态外部INT my_function(INT N, [在,的Marsha
..
我有一个静态库。这个库已经定义了下面的函数 INT WriteData(LPTSTR S) 要调用的函数的样品 LPTSTR S =(LPTSTR)L“测试数据”; INT N = WriteData(S); WriteData返回0成功-1失败。 我写一个动态的DLL导出此功能。 INT TestFun(LPTSTR的lpData) { 返回WriteDa
..
我尝试调用一个普通的C函数从外部DLL从我的C#-application。此功能被定义为 无效set_param(为const char *数据) 现在我已经使用这个功能的一些问题: 如何指定这个“常量”在C# - code? 公开静态外部无效set_param(为sbyte *数据)似乎错过了“常量”部分 我如何交出平,8位C-串调用这个函数的时候?调用为 set_p
..
我有一个简单的应用程序加载的非托管的DLL,并传递了一些字符串值,将它从C#。但在C ++ DLL的应用程序,我收到一个异常:试图访问一个读/写保护的内存。我的DLL导入是这样的: [的DllImport(“X.dll”,CallingConvention = CallingConvention.Cdecl) 公共静态外部INT DumpToDBLogFile([的MarshalAs(Unma
..
什么是运行时可调用包装(RCW)的范围,引用非托管COM对象时?根据文档: 运行时恰好创建一个RCW 每个COM对象不顾,则 存在的引用数 该对象。 如果我必须“猜测” - 这样的解释应该是指“每个过程中的一个”,但真的是这样吗?任何额外的文件会非常欢迎的。 我的应用程序在其自己的应用领域(这是Outlook中的插件)运行,我想知道,如果我(X)在循环使用Marshal.ReleaseC
..
在我的Azure Web角色code我从 System.Security.Principal.IIdentity CustomIdentity 类C>。在某些时候,.NET运行库试图序列化类和的序列化是行不通的。试图解决我搜索了很多,发现现在一旦我的 CustomIdentity 类从 MarshalByRefObject的继承存在了是没有序列化的企图和我的code作品。不过,我想知道使用的性能影
..
在试图回答这个问题我决定,我需要逐步通过手工编组过程,在调试器视图。 不幸的是,Visual Studio中似乎向右跳过所有这些有趣的code。这里的P / Invoke调用到 GetProfilesDirectory (一WinAPI的函数): 但踏入此调用(F11)后,我不觉得自己在 FFF9BFD8 ;相反,我就在 GetProfilesDirectory $ C $丙地: 另
..
我试图调用从C#以下琐碎的C函数: SIMPLEDLL_API为const char * ReturnString() { 返回“返回一个静态字符串!”; } 通过后的P / Invoke的声明(有或没有回报的属性,它使没有区别): [的DllImport(“SimpleDll”) [返回:的MarshalAs(UnmanagedType.LPStr) 公共静态外部串Ret
..
我需要通过C#字符串数组转换成C code 例C code 无效print_string_array(为const char ** str_array,INT的长度){ 的for(int i = 0; I<长度;我++){ 的printf(“刺[%1] =%s的\ N”,我,str_array [I]); } } C,它我试图#(这不工作) 字
..
我有一个方法,我想从一个DLL导入和它的签名: BOOL GetDriveLetter(OUT字符*驱动器号) 我试过 [的DllImport(“MYDLL.DLL”) 公共静态的extern BOOL GetDriveLetter(byte []的驱动器号); 和 [的DllImport(“MYDLL.DLL”) 公共静态的extern BOOL Ge
..
我的C declerations如下: INT的myData(UINT myHandle,TCHAR *数据名,长*时间,UINT * MAXDATA,DATASTRUCT **数据); typedef结构{ 字节相对; __int64时间; 字符验证; unsigned char型数据[1]; } DATASTRUCT; 我的C#declerations如下:
..
免责声明:接近零与编组概念。 我有一个包含一个字符串+的结构C.数组,我需要跨越巨大的互操作性鸿沟发送给COM结构体。B - C ++消费 什么是正确的属性集我需要装饰我的结构定义? [标记有ComVisible特性(真) [StructLayout(LayoutKind.Sequential) 公共结构一 { 公共字符串STRA 大众B B; } [标记有ComV
..
我想马歇尔是我的家乡的dll通过CoTaskMemAlloc来分配到我的C#应用程序的一些数据,并想知道如果我做的方式是完全错误的或我缺少的方法C#侧的一些sublte装饰。 目前我有C ++的一面。 的extern“C”__declspec(dllexport)的BOOL __stdcall的COM pressData(无符号字符* pInputData,无符号整型INSIZE,无符号字
..
我们正在通过挖掘一些非常旧的C ++ / CLI的code(旧语法.NET测试版),并都感到有点惊讶地看到这样的内容: 系统::字符串^源(“测试字符串”); 的printf(“%s”时,源); 程序正确输出 测试串 我们想知道,为什么它可以通过托管字符串源的printf - 更重要的是:为什么它的工作原理的?我不希望它是一些方便,功能由编译器,因为下面不工作: 系统::
..
显然有Blittable型的列表,所以到目前为止,我没有看到具体上枚举。他们是一般blittable?抑或是取决于它们是否有blittable基本类型中声明? //例。 内部枚举SERVERCALL:UINT { IsHandled = 0, 拒绝= 1, RetryLater = 2, } 参考耗尽: “Blittable和非Blittable型”
..
我们正在建立一个应用程序(的WinForms,.NET 3.5)加载“插件”的DLL到一个次要的AppDomain。次级的AppDomain需要与第一1偶尔通信(更具体地,呼叫或来自为主的AppDomain创建的对象获得的数据)。 我看了大部分材料有关他们之间的AppDomain和沟通。 到目前为止,只有简单的解决方案我已经看到了继承的的 MarshalByRefObject的的并传递一个的的
..
我试图做到这一点的方法很多,但没有一个是工作。有没有人有一个正确的榜样呢?我只是想从一个函数到C#的水平移动 wchar_t的* 值。 解决方案 这是不是你认为它是困难...什么是 wchar_t的* ?什么样的价值确实该类型通常重新present?一个字符串。这是等同于 LPWSTR 在 WINDOWS.H 类型来定义。 所以,你封送它作为一个字符串键入。然而,因为它是一个退出参数(或返回
..