dllimport相关内容
我曾经在某些互操作中做过一些愚蠢的事情(使用 DllImport ),但是它仍然可以在32位计算机上工作。 在导致方法1行为不同的64位应用程序上做了什么不同(以及为什么?)? 方法1(错误方式): ref字节参数// DllImport`ed函数的签名 ref myarray [0] //参数何时传入调用函数 方法2(正确方法): byte []
..
我在解决方案中使用了 DllImport 。 我的问题是我有两个版本的同一DLL,一个是为32位构建的,另一个是 它们都使用相同的名称和相同的签名公开相同的功能。 我的问题是我必须使用两种公开这些方法的静态方法,然后在运行时使用 IntPtr 大小来确定要调用的正确方法。 私有静态类Ccf_32 { [DllImport(myDllName32)] public st
..
我有一个用C语言用源代码编写的DLL。这是通用多边形剪切器的代码(如果您感兴趣)。我通过首页提供的C#包装器在C#项目中使用它。 由于切换到具有Visual Studio 2010和Windows 7 64位的64位开发计算机,该应用程序将不再运行。这是我得到的错误: 试图加载格式错误的程序。 这是因为 DLLImport 使用了32位 gpc.dll ,因为我是从网上找到的东西
..
我正在尝试在C#(2010)中使用VC ++(2003)dll 从C#调用dll方法时出现此错误 “方法的类型签名与PInvoke不兼容" I am returning the structure from VC++ Code: struct SLFData { public: char ByLat[10]; char ByLong[10]; }; And I am marshalling
..
关于使用DllImport的某些特定问题的文章很多. las,我经常看到对同一问题的不同答复. 例如,有人说如果c ++函数返回aa char *和int * strLen,那么有人说我应该在我的dllImport语句中使用StringBuilder,而其他人则说return byte [],有些人在dllImport中有一个marshall语句,有些人则不这样做.没错由于旧的C#/.net版本,
..
我正在编写一个C#应用程序,该程序将大小为30的空字符串数组传递给C ++ DLL.该字符串数组需要填充到DLL中,并返回给C#应用程序. 我的代码在DLL的函数调用结束时观察到内存损坏. 我的C ++ DLL代码如下: SAMPLEDLL_API BOOL InitExecution (wchar_t **paszStrings, int count) { for (i
..
我用C ++编写程序并将其导出为DLL.我有一个C#WPF GUI,我想导入DLL进行处理. 我对C#非常陌生.如何在C#中使用C ++类?我知道我不能只使用.h文件. 因为我在C ++中使用了指针,所以在C#中我无法使用指针.这就是为什么我感到困惑.像在C ++中一样,我使用char*而不是string,并且我需要返回double*以获得大量的double数据,诸如此类. 解决
..
这是我的C代码: LIBRARY_API bool __cdecl Initialize(void (*FirstScanForDevicesDoneFunc)(void)); 这是可用于此DLL的C#PINvoke代码: [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate
..
我正在尝试使用 C原型 HRESULT WINAPI AmsiScanBuffer( _In_ HAMSICONTEXT amsiContext, _In_ PVOID buffer, _In_ ULONG length, _In_ LPCWSTR contentName, _In_opt_ HAMSI
..
我正在通过使用DllImport在我的C#项目中使用用C ++编写的DLL,而我正在使用的功能之一如下: [DllImport("dds.dll", CharSet = CharSet.Auto)] private static extern int Par( ddTableResults2 tableResult, ref parResult
..
FreeLibrary为何会重复返回true? 我正在尝试从进程中卸载某些本机dll,所以我得到了它的句柄,然后调用FreeLibrary,直到引用计数变为零,因此FreeLibrary返回false ...,但从未这样做: IntPtr pDll = DllLoadingImports.LoadLibrary(dllTounLoad); //throw if pDll == IntP
..
需要帮助的新程序员! 已编译到DLL中的Delphi代码 function SetCurrentSerial(Size : Integer; Msg : Pointer) : Integer stdcall; var TempByte : PByte; TempStr : string; i: Integer; begin Result := 0; TempByte
..
我正在尝试从C#程序调用用Rust编写的DLL. DLL具有两个简单的函数,它们以不同的方式显示字符串并打印到控制台. Rust DLL代码 #![crate_type = "lib"] extern crate libc; use libc::{c_char}; use std::ffi::CStr; #[no_mangle] pub extern fn printc(s: *c
..
我正在尝试使用希望将int **用作该方法的参数之一的第三方DLL.它将参数描述为指向内存分配的指针的地址. 很抱歉造成任何混乱.我认为该参数是双向的. DLL用于与FPGA板通信,方法是在主机PC和PCI板之间设置DMA传输. 解决方案 使用by-ref System.IntPtr . [DllImport("thirdparty.dll")] static extern
..
为了尝试在C#中使用PInvoke,我有点不确定如何使用涉及简单值类型的指针处理各种情况. 我要从非托管DLL导入以下两个函数: public int USB4_Initialize(short* device); public int USB4_GetCount(short device, short encoder, unsigned long* value); 第一个函数使用
..
鉴于此C API声明,如何将其导入C#? int _stdcall z4ctyget(CITY_REC *, void *); 我已经可以做到这一点了 [DllImport(@"zip4_w32.dll", CallingConvention = CallingConvention.StdCall, EntryPoint = "z4ctyget
..
我想知道是否有人对托管的.Net代码在Win32方法上使用DLLImport/PInvoke的负面方面有不错的解释或概述? 我计划使用各种Win32方法,并希望对这样做的负面影响有更多的了解. 谢谢 布莱恩. 解决方案 根据 MSDN-从托管代码调用本机函数 PInvoke每个调用的开销为10到30条x86指令.除此固定成本外,封送处理还会产生额外的开销.在托管和非
..
我有char缓冲区的对象池,并在P/Invoke调用中传递了此缓冲区.在呼叫之前是否需要固定缓冲区? 第一种方法: [DllImport("Name", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] private static extern void SomeMeth(char[] t
..
出于版本控制的原因,能够在本机C ++ dll上使用p/invoke对我来说将是有益的,其文件名将在运行时确定,例如: [DllImport(myDllFilename)] private static extern void MyInvokedMethod(); 不幸的是,[DllImport]是一个属性,需要一个常量表达式.还有其他解决此错误的方法吗? 我知道我可以在不同的文件
..
我正在使用DllImport从我自己的.net类调用c包装器库中的方法. c dll中的此方法创建一个字符串变量,并返回该字符串的指针. 像这样的东西 _declspec(dllexport) int ReturnString() { char* retval = (char *) malloc(125); strcat(retval, "SOMETEXT"); strcat(r
..