草庐IT

c# - 将包含 int 和 int[] 的结构从 C# 编码到 C++

我有一个带有非托管代码的C++DLL和一个C#UI。有一个从C++DLL导入的函数,它以我编写的结构作为参数。将我编写的结构(MyImage)从C#编码到C++后,我可以访问其中的int[]数组的内容,但内容不同。我不知道我在这里遗漏了什么,因为我花了很多时间并尝试了一些技巧来解决这个问题(显然还不够)。C#中的MyImage结构:[StructLayout(LayoutKind.Sequential)]structMyImage{publicintwidth;publicintheight;publicint[]bits;//theserepresentcolorsofimage-4

c# - 我想从 C++ 非托管代码调用 C# 委托(delegate)。无参数委托(delegate)工作正常,但带参数的委托(delegate)使我的程序崩溃

以下是来自未管理的dll的函数代码。它接受一个函数指针作为参数,并简单地返回被调用函数返回的值。extern__declspec(dllexport)int_stdcallcallDelegate(int(*pt2Func)());extern__declspec(dllexport)int_stdcallcallDelegate(int(*pt2Func)()){intr=pt2Func();returnr;}在托管C#代码中,我使用委托(delegate)调用上面的umanged函数。unsafepublicdelegateintmydelegate();unsafepublici

c# - 如何将带有 Union 的 C++ 结构转换为 C#?

伙计们,我在调用DLL中的函数后检索结构成员值时遇到困难。我尝试将C++代码转换为C#,但我不确定它是否正确。请帮助我理解我这里的错误(如果有的话)以及如何改正。我的问题是,在从DLL调用ReceiveMessage函数后,我无法正确检索INNERSTRUCTS(Union)的值。例如m_objMsg.MsgData.StartReq.MsgID始终为0。但是当我尝试使用C++.exe程序时,MsgID具有正确的值。(不是0)C++代码:externintReceiveMessage(SESSION,int,Msg*);typedefstruct{charSubsId[15];intL

c# - PInvoke x64 崩溃与 .Net 4.0

我的任务是让一些C#代码在x64中工作,这些代码调用名为Detagger的nativex64dll,用于将HTML转换为文本,同时保持HTML的基本结构。此代码在为C#代码和dll的x86构建平台目标x86运行时运行了多年,但在将平台目标设置为x64并使用dll的x64构建时它崩溃了。事实上,如果C#应用程序是使用.NetFramework3.5或更低版本构建的,则x64可以正常工作。使用4.0或更高版本构建时会崩溃。有问题的dll具有以下header:#ifdefWIN32#ifdefUSE_DLL#ifdefDLL_EXPORTS#defineDLL_DECLARE__declsp

C#/C++ pInvoke 技巧

修改C++程序以与来自C#.NETCF的pInvoke一起使用的最佳方法是什么?我有一个大型C++代码库,它广泛使用了STL。即迭代器、容器类和标准字符串。除此之外,许多轻量级类都是按值传递的。我想在此代码库之上为Windows移动触摸设备构建一个C#图形用户界面。值得吗?我已经设法获得了一些使用pInvoke从C#.NET调用C++代码的示例,但是为每个访问点和所有STL返回类型编写包装器似乎非常令人生畏和丑陋。还有其他方法还是我有点吃饱了?顺便说一句。托管C++不是一个选项,因为.NETCF不以任何形式支持它。--编辑:我有一个关于pinvoke的具体问题。假设您有一个按值返回C+

c# - 为非托管 (C++) 代码编写托管包装器 - 自定义类型/结构

faacEncConfigurationPtrFAACAPIfaacEncGetCurrentConfiguration(faacEncHandlehEncoder);我正在尝试为这个C++库设计一个简单的包装器;我以前从未做过比非常简单的p/invoke互操作更多的事情——比如一个带有原始参数的函数调用。那么,以上面的C++函数为例,我应该如何处理返回类型和参数呢?FAACAPI定义为:#defineFAACAPI__stdcallfaacEncConfigurationPtr定义:typedefstructfaacEncConfiguration{intversion;char*n

c++ - 在 MonoTouch 和 MonoDroid 中使用现有的 c++ 库

这里是单声道新手,我想在为iPhone和Android编写的应用程序中使用现有的C++库。我正在尝试找到将它绑定(bind)到我的Mono项目的最佳策略,以便将平台之间的变化降到最低。我试图在网上阅读它,并遇到了CXXI、P/Invoke等,但无法理解这些方法是否适用于所有平台。另外,我不知道CXXI是否足够稳定,或者它是否适合MonoDroid和MonoTouch。您认为哪种方法最方便,跨平台性最好? 最佳答案 目前最简单的方法是在您的C++库上编写C包装器,然后为您的(新)CAPI编写p/invokes。这种方法用于Moonli

c# - 在 C# 委托(delegate)中编码 va_list

我正在尝试通过C#实现此功能:C头文件:typedefvoid(LogFunc)(constchar*format,va_listargs);boolInit(uint32version,LogFunc*log)C#实现:staticclassNativeMethods{[DllImport("My.dll",SetLastError=true)]internalstaticexternboolInit(uintversion,LogFunclog);[UnmanagedFunctionPointer(CallingConvention.Cdecl,SetLastError=true)

c# - 如何使用 P/INVOKE 将 C++ char* 编码为 C# 字符串

我是C++新手。我正在使用PINVOKE从C#调用C++函数,并希望将字符串作为输出参数返回。但是我只得到一个空字符串。intout参数工作正常。导入:[DllImport(@"UnamanagedAssembly.dll",CharSet=CharSet.Ansi)]publicstaticexternintActivate(refintnumActivated,StringBuildereventsActivated);extern"C"__declspec(dllexport)intActivate(int*p_NumActivated,char*p_EventsActivate

c# - 在 C# 中为 p/invoke 创建一个基本的 C++ .dll

我是一名C#程序员,不幸的是,由于年龄和经验,我没有机会在我的学习中经历C++编程时代的奢侈——其中很多东西对我来说都是神秘和新鲜的.不是真的在这里争论学习或不学习的重要性,但我需要一些帮助来解决一件微不足道的事情。问题我需要帮助将我的C++代码打包成.dll。我没有使用C++的经验,并且在制作我可以从(VisualStudio2010)中p/调用的工作.dll时遇到了很大的困难。请继续阅读以获取更多详细信息以及我尝试打包的代码。详情我有一些代码需要在非托管环境中运行。一般情况下,一个简单的p/invoke就适合这个任务。连接一些[ImportDll]就可以了。最坏的情况我有时可以使用