草庐IT

c# - 编码不当 : C# array to a C++ unmanaged array

我有以下C#代码,其中包含结构定义(CInput)、obj定义和初始化,以及对C++(native)DLL函数的调用(这也是我编写的)。//C#codepublicstructCInput{[MarshalAsAttribute(UnmanagedType.R8)]publicdoubleTime;[MarshalAs(UnmanagedType.SafeArray,SafeArraySubType=VarEnum.VT_R8)]publicdouble[]Database;/*othersimilarfields*/}CInputInputs=newCInput();/*initof

c# - 从 PInvoke 返回一个字符串?

这个问题在这里已经有了答案:Marshal"char*"inC#(2个答案)关闭4年前。我正在使用PInvoke实现native代码(C++)和托管代码(C#)之间的互操作性。我只是写了一个简单的函数,它从C++代码中获取一个字符串。我的代码看起来像C#代码:[DllImport("MyDll.dll")]privatestaticexternstringGetSomeText();publicstaticstringGetAllValidProjects(){strings=GetSomeText();returns;}C++代码char*GetSomeText(){std::str

c# - C# 中的 _BitScanForward?

我正在将一个用C++编写的程序转换为C#,我遇到了一个我无法解决的内部函数。在C++中,这被称为:unsignedchar_BitScanForward(unsignedlong*Index,unsignedlongMask);如果我只知道内部函数所在的DLL(如果有的话),我就可以使用P/Invoke。由于我不知道,所以我在.NET框架中寻找替代方案,但我一无所获。有谁知道如何在_BitScanForward上使用P/Invoke或执行相同操作的.NET方法?感谢任何帮助,谢谢。 最佳答案 内部函数不在任何库中,它们在CPU内部实

ios - 对静态库的非托管 C# 调用

我正在使用swig为一些要从C#使用的C代码库生成C#包装器。当我运行swig时,它会生成一个包装器c文件,该文件将所有功能公开给生成的PInvokeC#文件...例如://ThisisinKodLogic_wrap.cSWIGEXPORTvoidSWIGSTDCALLCSharp_DMGameMode_timeLimit_set(void*jarg1,unsignedshortjarg2){...}//ThisisinKodLogicPInvoke.cs[global::System.Runtime.InteropServices.DllImport("KodLogic",Entry

c# - MonoTouch 绑定(bind)不能使用字段

你好,我正在尝试将googleadmboads更新到V6,但我在绑定(bind)以下内容并将其暴露给托管世界时遇到了一些麻烦我有以下结构typedefstructGADAdSize{CGSizesize;NSUIntegerflags;}GADAdSize;我在单点触控方面做了这个[StructLayout(LayoutKind.Sequential)]publicstructGADAdSize{publicSizeFsize;publicuintflags;}我有以下代码externGADAdSizeconstkGADAdSizeBanner;externGADAdSizeconst

C#_Win32_PInvoke源码生成器

介绍一个源代码生成器,用于向C#项目添加一组用户定义的Win32P/Invoke方法和相关的类型。链接地址:https://github.com/microsoft/CsWin32还在手动添加平台调用的代码或者增加无用的程序集?微软的官方解决方案来了!特色快速将P/Invoke方法和相关类型添加到您的C#项目。没有笨重的程序集,按需使用自动生成安全的类型SafeHandle基于微软的官方链接生成xml文档和接口注释先决条件The.NET5SDKorVisualStudio2019Update8(16.8)(具体看自己Github上的说明吧)使用方法安装nuget包dotnetaddpackag

c# - P/Invoke 是否执行 DLL 然后将其关闭?

如果我使用C#来P/Invoke某个DLL,实际的C++DLL是否会在调用期间运行然后关闭,从而破坏所有使用的内存?还是.NET会在非托管“堆”中负责C++DLL使用的内存,并在我每次调用静态函数时将指向这些对象的指针指向C++DLL?当我需要某个C++项目使其内存持久化时,我是否应该创建一个ActiveX/COM服务器以使其内存持久化,并且能够从C#中调用它? 最佳答案 IfIuseC#toP/InvokeacertainDLL,willtheactualC++DLLberunforthedurationofthecallandt

c# - P/Invoke with arrays of double - 在 C# 和 C++ 之间编码数据

我已经阅读了关于C++InteropwithP/Invoke的各种MSDN页面here和here但我仍然很困惑。我有一些大型double组需要进入native代码,还有一些结果数组需要返回。我事先不知道输出数组的大小。为简单起见,我将在示例中仅使用一个数组。平台是x64;我读到32位和64位环境之间的内部编码非常不同,因此这可能很重要。C#[DllImport("NativeLib.dll")]publicstaticexternvoidComputeSomething(double[]inputs,intinlen,[Out]outIntPtroutputs,[Out]outinto

c# - 将函数从 C++ dll 导出到 C# P/Invoke

我已经构建了一个C++dll,我想从C#代码调用它。我能够调用一个函数,但另一个在C#代码尝试加载dll时引发异常。标题看起来像这样:extern"C"__declspec(dllexport)BOOLInstall();extern"C"__declspec(dllexport)BOOLPPPConnect();这会生成一个带有稍微困惑的导出表的dll(名称字段中的foo=foo是什么意思?):FileType:DLLSectioncontainsthefollowingexportsforPPPManager.dll00000000characteristics499F44F0ti

c# - 如何在 C# 中编码(marshal) C++ 枚举

我需要在C++和C#之间创建一个包装器。我有一个与此非常相似的功能:virtualSOMEINTERFACE*MethodName(ATTRIBUTE_TYPEattribType=ATTRIBUTE_TYPE::ATTRIB_STANDARD)=0;enum声明如下:enumclassATTRIBUTE_TYPE{ATTRIB_STANDARD,ATTRIB_LENGTH};如何包装ATTRIBUTE_TYPE枚举? 最佳答案 您的C++枚举定义如下:enumclassATTRIBUTE_TYPE{ATTRIB_STANDARD,