草庐IT

托管所

全部标签

.net - 确定何时在(非托管)C++ 中加载 .NET

[这让TLDR...抱歉...]我在一个巨大的(主要是)C++/MFC应用程序上工作,它有数百个DLL;它支持通过COM动态加载的“加载项”机制,因此可以使用COM互操作在.NET中开发加载项。一些有限的新功能是在.NET中开发的,没有使用这种“插件”机制(尽管仍然是动态加载的);但是,最终用户可以决定不使用此功能。因此,.NET可能不会在启动时加载。但是,当加载.NET时,我需要执行一些特定于.NET的初始化(特别是设置CurrentUICulture以匹配native/非托管UI)。一种解决方案是在代码开始加载新的.NET功能或COM加载项时简单地进行.NET初始化。鉴于此应用程序

.net - 如何根据 CPU 架构使用正确的非托管 DLL 文件? (32/64 位)

我必须使用来自ASP.NET站点的C++DLL文件。该站点将托管在32位和64位环境中。我有一个32位和64位版本的非托管DLL文件。如何根据当前服务器架构从正确的方法导入方法?就像有人发布的那样,这可以作为部署问题来处理。我担心的是:使用这个DLL文件的Web应用程序很大,而且我们没有部署文档。没有人会记得部署正确的DLL文件,所以我试图从解决方案中消除人为因素:) 最佳答案 最简单的方法是在两个不同的目录中为两个native库提供相同的文件名,然后adjustyourapplicationDLLsearchpath取决于位数。h

c# - 在 Windows 7 中从托管代码调用非托管代码时发生内存泄漏

当我从我的C#代码调用非托管C++代码时,我似乎有某种内存泄漏。C++使用ifstream.read从文件中读取数据,并将其写入Vector。这只会在升级到Windows7后发生,在Vista上不会发生,但如果我使用在Vista上编译的nativedll版本,它不会改变任何东西!如果我在没有托管互操作的情况下直接运行相同的C++代码,则不会发生内存泄漏!如果我运行托管进程,但在vshost进程内,则没有内存泄漏!这是调用签名:[DllImport(DllPath,CharSet=CharSet.Unicode)][return:MarshalAs(UnmanagedType.I1)]p

c# - 在托管代码中调用 SSE 代码(对齐)

这是我的问题:我们有一个用C++编写的数学库,它大量使用SSE。我们需要在我们的工具(用C#编写)的托管层中使用相同的数学库。问题是,数学库类必须是16字节对齐的(SSE才能工作)。但是,在编译托管代码时,我遇到了很多错误,因为不支持“__declspec(align(X))”。知道这是否可能吗?我找不到任何有用的信息。一些附加信息:用C++编写的数学库使用SSE来实现最佳性能。然而,我们的工具不需要最高性能,与一般C#代码相比,我们甚至可以承受性能损失。它更多的是能够实际执行我们所有的代码(这是一个巨大的代码库),而无需人们在数据类型之间来回转换。所以这实际上只与可用性有关,与性能无

c# - 从非托管代码调用托管 .NET 代码的最佳方式

我试图找到从非托管C++代码调用托管.NET代码的最佳性能方法。我在我的C++应用程序中找到了有关托管.NET的信息,并且我能够创建pRuntimeHost并毫无问题地启动它。ExecuteInDefaultAppDomain似乎非常有限,因为我真的想向它发送一些参数并让它返回信息结构。最明显的替代方法是使用COM方法,但当前的C#代码并未真正设置为方法接口(interface)。无论哪种方式,我都想返回整数、字符串(char*)、double和其他核心C++类型。双方都有太多代码无法将C++转换为C#,并且使用托管C++不是一个可接受的解决方案,因为使用此C++代码的其他组出于性能原

c# - 从 C# 调用非托管代码 - 返回带有数组的结构

[编辑]我按照StephenMartin的建议更改了来源(以粗体突出显示)。并添加了C++源代码。我想在自己编写的C++dll中调用非托管函数。该库读取机器的共享内存以获取第三方软件的状态信息。由于有几个值,我想在结构中返回这些值。但是,在结构中有char[](具有固定大小的char数组)。我现在尝试从这样的dll调用中接收该结构:[StructLayout(LayoutKind.Sequential)]publicstructSYSTEM_OUTPUT{UInt16ReadyForConnect;[MarshalAs(UnmanagedType.ByValTStr,SizeConst

c# - 将 C# 字符串传递给 Windows Mobile 中的非托管 C DLL

我有一个非托管C++DLL,我需要从WindowsMobileC#应用程序调用它。我有C#包装器,它在桌面上运行良好。我可以从C#桌面程序调用DLL函数并毫无问题地传递字符串。但是,当我为移动平台编译库和包装器时,我在DllImport行中收到一个错误,指出CharSet.ANSI无法识别。允许我编写的唯一选项是CharSet.Auto和CharSet.Unicode。问题是,不管这个设置如何,在c++函数中接收到的字符串都是宽字符字符串,而不是他们所期望的普通char*字符串。我们可以使用wcstombs()来翻译每个c++函数开头的所有字符串,但我宁愿不要将lib修改到这样的程度.

c# - 将多维数组从托管代码传递到非托管代码

我想做以下事情:在C#代码中创建三维数组,如下所示:varmyArray=newshort[x,y,z];UnanagedFunction(myArray);像这样将它传递给非托管代码(c++):voidUnmanagedFunction(short***myArray){shortfirst=myArray[0][0][0];}已更新当我尝试以下代码时出现运行时错误:Attemptedtoreadorwritetoprotectedmemory.谢谢!!! 最佳答案 IntPtrArray3DToIntPtr(short[,,]V

c++ - native 数组的 Memcpy 到 C++ CLI 中的托管数组

我这样做对吗?我得到一个指向native数组的指针,需要复制到托管数组。将memcpy()与pin_ptr结合使用。unsignedchar*pArray;unsignedintarrayCount;//getpArray&arrayCount(fromaCOMmethod)ManagedClass->ByteArray=gcnewarray(arrayCount)pin_ptrpinPtrArray=&ManagedClass->ByteArray[0];memcpy_s(pinPtrArray,arrayCount,pArray,arrayCount);arrayCount是pAr

.net - 托管 C++ 中的逐字文字? (比如 C#'s @"废话)

有没有办法在托管C++中使用逐字字符串文字?类似于C#的StringDocs=@"c:\documentsandsettings\" 最佳答案 在C++11中,有原始字符串文字:cout输出是:(\"ddd\aa)\n(\"ddd\aa)\n 关于.net-托管C++中的逐字文字?(比如C#'s@"废话),我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/353464/