草庐IT

Marshalling

全部标签

C++托管到非托管的转换

我已经完成了许多托管包装器,这些包装器处理包装非托管代码以便在托管中使用,但没有那么多是相反的。我正在运行的一个实验涉及使用托管代码来查找目录并将它们返回到stdvector中。长话短说,我在处理以下示例时发现了一个问题。#include"Helper.h"#include#includeusingnamespacemsclr::interop;usingnamespaceSystem;namespaceCLIWrapper{std::vectorHelper::GetDirs(constchar*root){std::vectorrval;String^path=gcnewSyste

c# - PInvoke:在 C++ 中分配内存并在 C# 中释放它

我们正在使用PInvoke在C#和C++之间进行互操作。我有一个如下所示的互操作结构,另一侧具有相同布局的C++结构。[StructLayout(LayoutKind.Sequential)]publicstructMeshDataStruct:IDisposable{publicMeshDataStruct(double[]vertices,int[]triangles,int[]surfaces){_vertex_count=vertices.Length/3;_vertices=Marshal.AllocHGlobal(_vertex_count*3*sizeof(double)

c# - 这些 C++ 结构的 C# 等价物是什么

typedefunion_Value{signedcharc;unsignedcharb;signedshorts;unsignedshortw;signedlongl;unsignedlongu;floatf;double*d;char*p;}Value;typedefstruct_Field{WORDnFieldId;BYTEbValueType;ValueValue;}Field;typedefstruct_Packet{WORDnMessageType;WORDnSecurityType;BYTEbExchangeId;BYTEbMarketCenter;intiFieldCo

c# - 如何在托管代码 (C#) 中从 native 代码 (C++) 获取字符串数组

有什么办法可以从c++到c#获取字符串集合C#代码[DllImport("MyDLL.dll")]privatestaticexternListGetCollection();publicstaticListReturnCollection(){returnGetCollection();}C++代码std::vectorGetCollection(){std::vectorcollect;returncollect;}以上代码仅为示例,主要目的是从C++中获取C#中的集合,不胜感激//詹姆士 最佳答案 有多种方法可以解决这个问题,

c++ - 对于具有线程模型两者的对象,COM 编码是否(永远)是必需的?

这是由anotherquestion触发的.具体来说,我有一个进程中的COM类,它在CLSIDregistry中定义。因为有ThreadingModelofBoth.我们的流程通过CoCreateInstance激活这个对象(不是CoCreateInstanceEx,如果这对进程内dll服务器很重要的话)给定一个Both的线程模型和docs中列出的规则:Threadingmodelofserver|Apartmentserverisrunin------------------------------------------------------Both|Sameapartmenta

c# - 将字符串数组从 C++ 传递到 C#

我已经编写了这段运行良好的代码:C++代码extern"C"{constMYLIBRARY_EXPORTchar*giefStrPlx(char*addon){returnaddon;}}C#代码[DllImport("ClassLibrary1")]privatestaticexternIntPtrgiefStrPlx(stringx);voidStart(){IntPtrstringPtr=giefStrPlx("Huntsman");stringhuntsman=Marshal.PtrToStringAnsi(echoedStringPtr);}在此huntsman之后包含“Hu

c# - 将 C char[][] 数组编码到 C#

我看了又看,尝试了所有我能想到的或发现的建议。我仍然没有运气获得我需要的数据。我正在使用第三方DLL,我认为它是用C语言编写的。我需要在C#中访问此DLL中的函数。在大多数情况下,我有这个工作,除了一个功能。我遇到问题的函数具有以下header:uintqueryNumOfServers(USHORT*NumOfServers,charServerNames[8][16]);我在我的C#应用程序中声明了以下内容[DllImport("client.dll",CharSet=CharSet.Ansi]publicstaticexternuintqueryNumOfServers(refs

c# - 基于 Windows 8.1 构建的 .NET 4.0 程序集不适用于较低的 Windows 版本

我们有一个使用Marshall的项目,该项目由C++核心库和.NET包装器(2.0和4.0)组成。构建机器具有Windows8.1操作系统。C++核心和.NET2.0包装器是使用MSVC2005构建的,并且可以在具有较低Windows版本的其他机器上完美运行。.NET4.0包装器是使用MicrosoftSDK7.1构建的。库在构建​​机器上运行良好,但在其他机器(安装了.NET4.0)上崩溃并出现以下错误:Exception:System.MissingMethodException:Methodnotfound:'IntPtrSystem.Runtime.InteropService

c# - 将具有 C++ 引用成员的 C# 类编码

我们的任务是将一个类与另一个类的引用从C#传递到C++。C#类如下所示:[StructLayout(LayoutKind.Sequential,Pack=1)]publicclassImageInfo{publicuintWidth;publicuintHeight;publicuintStride;}[StructLayout(LayoutKind.Sequential,Pack=1)]internalclassFrameInfo{publicintFrameNumber;publicdoubleTimeStamp;publicImageInfoImage;//Thisisthepr

C# 编码 C++ 结构继承

假设我在C++中有以下结构structBase{USHORTsize;}structInherited:publicBase{BYTEtype;}我想在C#中编码Inherited但结构继承在C#中不起作用。做以下是否合适?publicinterfaceIBase{ushortSize{get;set;}}[StructLayout(LayoutKind.Sequential)]publicstructInherited:IBase{publicushortSize{get;set;}publicbyteType{get;set;}}我在这里简化了问题,我的结构更大,因此很难验证结果。