dllimport相关内容

为什么(不正确)使用ref myarray [0]来传递数组,但是只能在32位应用程序中使用?

我曾经在某些互操作中做过一些愚蠢的事情(使用 DllImport ),但是它仍然可以在32位计算机上工作。 在导致方法1行为不同的64位应用程序上做了什么不同(以及为什么?)? 方法1(错误方式): ref字节参数// DllImport`ed函数的签名 ref myarray [0] //参数何时传入调用函数 方法2(正确方法): byte [] ..
发布时间:2020-05-31 21:46:25 C#/.NET

在C#中以编程方式设置dllimport

我在解决方案中使用了 DllImport 。 我的问题是我有两个版本的同一DLL,一个是为32位构建的,另一个是 它们都使用相同的名称和相同的签名公开相同的功能。 我的问题是我必须使用两种公开这些方法的静态方法,然后在运行时使用 IntPtr 大小来确定要调用的正确方法。 私有静态类Ccf_32 { [DllImport(myDllName32)] public st ..
发布时间:2020-05-31 21:31:24 C#/.NET

如何使用Visual Studio 2010编译64位的C DLL?

我有一个用C语言用源代码编写的DLL。这是通用多边形剪切器的代码(如果您感兴趣)。我通过首页提供的C#包装器在C#项目中使用它。 由于切换到具有Visual Studio 2010和Windows 7 64位的64位开发计算机,该应用程序将不再运行。这是我得到的错误: 试图加载格式错误的程序。 这是因为 DLLImport 使用了32位 gpc.dll ,因为我是从网上找到的东西 ..
发布时间:2020-05-31 20:51:04 其他开发

DLLImport c ++函数具有char *输入和输出参数

关于使用DllImport的某些特定问题的文章很多. las,我经常看到对同一问题的不同答复. 例如,有人说如果c ++函数返回aa char *和int * strLen,那么有人说我应该在我的dllImport语句中使用StringBuilder,而其他人则说return byte [],有些人在dllImport中有一个marshall语句,有些人则不这样做.没错由于旧的C#/.net版本, ..
发布时间:2020-05-27 21:41:51 C#/.NET

将字符串数组从C#传递到C ++ DLL函数并将其填充到DLL中并返回

我正在编写一个C#应用程序,该程序将大小为30的空字符串数组传递给C ++ DLL.该字符串数组需要填充到DLL中,并返回给C#应用程序. 我的代码在DLL的函数调用结束时观察到内存损坏. 我的C ++ DLL代码如下: SAMPLEDLL_API BOOL InitExecution (wchar_t **paszStrings, int count) { for (i ..
发布时间:2020-05-27 21:40:18 C#/.NET

如何使用C#在Visual C ++ DLL中共享类?

我用C ++编写程序并将其导出为DLL.我有一个C#WPF GUI,我想导入DLL进行处理. 我对C#非常陌生.如何在C#中使用C ++类?我知道我不能只使用.h文件. 因为我在C ++中使用了指针,所以在C#中我无法使用指针.这就是为什么我感到困惑.像在C ++中一样,我使用char*而不是string,并且我需要返回double*以获得大量的double数据,诸如此类. 解决 ..
发布时间:2020-05-27 21:38:52 C#/.NET

使PInvoked方法保持活动状态

这是我的C代码: LIBRARY_API bool __cdecl Initialize(void (*FirstScanForDevicesDoneFunc)(void)); 这是可用于此DLL的C#PINvoke代码: [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate ..
发布时间:2020-05-27 21:36:07 C#/.NET

C#中的C ++结构

我正在通过使用DllImport在我的C#项目中使用用C ++编写的DLL,而我正在使用的功能之一如下: [DllImport("dds.dll", CharSet = CharSet.Auto)] private static extern int Par( ddTableResults2 tableResult, ref parResult ..
发布时间:2020-05-27 21:35:39 C#/.NET

FreeLibrary无限期地返回true

FreeLibrary为何会重复返回true? 我正在尝试从进程中卸载某些本机dll,所以我得到了它的句柄,然后调用FreeLibrary,直到引用计数变为零,因此FreeLibrary返回false ...,但从未这样做: IntPtr pDll = DllLoadingImports.LoadLibrary(dllTounLoad); //throw if pDll == IntP ..
发布时间:2020-05-27 21:33:12 C#/.NET

DLLImport Int **-如果可以的话如何做

我正在尝试使用希望将int **用作该方法的参数之一的第三方DLL.它将参数描述为指向内存分配的指针的地址. 很抱歉造成任何混乱.我认为该参数是双向的. DLL用于与FPGA板通信,方法是在主机PC和PCI板之间设置DMA传输. 解决方案 使用by-ref System.IntPtr . [DllImport("thirdparty.dll")] static extern ..
发布时间:2020-05-27 21:28:54 C#/.NET

涉及指针时如何P/调用

为了尝试在C#中使用PInvoke,我有点不确定如何使用涉及简单值类型的指针处理各种情况. 我要从非托管DLL导入以下两个函数: public int USB4_Initialize(short* device); public int USB4_GetCount(short device, short encoder, unsigned long* value); 第一个函数使用 ..
发布时间:2020-05-27 21:28:48 C#/.NET

如何将void * C API导入C#?

鉴于此C API声明,如何将其导入C#? int _stdcall z4ctyget(CITY_REC *, void *); 我已经可以做到这一点了 [DllImport(@"zip4_w32.dll", CallingConvention = CallingConvention.StdCall, EntryPoint = "z4ctyget ..
发布时间:2020-05-27 21:28:45 C#/.NET

在Win32/COM方法上调用PInvoke时,通常会明显降低性能吗?

我想知道是否有人对托管的.Net代码在Win32方法上使用DLLImport/PInvoke的负面方面有不错的解释或概述? 我计划使用各种Win32方法,并希望对这样做的负面影响有更多的了解. 谢谢 布莱恩. 解决方案 根据 MSDN-从托管代码调用本机函数 PInvoke每个调用的开销为10到30条x86指令.除此固定成本外,封送处理还会产生额外的开销.在托管和非 ..
发布时间:2020-05-27 21:28:04 C#/.NET

将char []固定在P/Invoke通话上

我有char缓冲区的对象池,并在P/Invoke调用中传递了此缓冲区.在呼叫之前是否需要固定缓冲区? 第一种方法: [DllImport("Name", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] private static extern void SomeMeth(char[] t ..
发布时间:2020-05-27 21:27:28 C#/.NET

P/使用运行时文件名调用本机DLL

出于版本控制的原因,能够在本机C ++ dll上使用p/invoke对我来说将是有益的,其文件名将在运行时确定,例如: [DllImport(myDllFilename)] private static extern void MyInvokedMethod(); 不幸的是,[DllImport]是一个属性,需要一个常量表达式.还有其他解决此错误的方法吗? 我知道我可以在不同的文件 ..
发布时间:2020-05-27 21:27:21 C#/.NET

可用内存不会清除内存块

我正在使用DllImport从我自己的.net类调用c包装器库中的方法. c dll中的此方法创建一个字符串变量,并返回该字符串的指针. 像这样的东西 _declspec(dllexport) int ReturnString() { char* retval = (char *) malloc(125); strcat(retval, "SOMETEXT"); strcat(r ..
发布时间:2020-05-27 21:27:04 C#/.NET