首页 > TAG信息列表 > PInvoke

FB(S1C1): PInvokeStackImbalance对PInvoke函数的调用导致堆栈不对称

FB(S1C1): PInvokeStackImbalance对PInvoke函数的调用导致堆栈不对称   问题:     C#语言 对 C语言 导出函数进行调用时报出的错误.  方案:     设置调用约定CallingConvention的枚举值中的CallingConvention.Cdecl.  实施:     C语言导出函数形式 extern "C" _

通过pinvoke.net生成win32托管代码

编写.net程序时,经常会用到SendMessage, BitBlt等非托管代码, 这时候需要使用pinvoke引入非托管方法。引入简单分成两个步骤: 去msdn查找方法定义在.net中定义托管方法 在这里推荐一个网站pinvoke.net,打开页面,直接搜索方法名,把托管代码复制出来就可以了。 另外还有一个对应的

P/Invoke各种总结(九、如何快速获取P/Invoke方法签名)

使用API函数已经好几年了,封装函数签名基本是参照MSDN上的文档,然后再做数据类型对应。 虽然有 pinvoke.net 这个网站,但基本很少使用。一方面是想多动手,另一方面是因为各种数据类型基本都用过了,都能自己在C#中 对应 起来。   最近在逛github时,发现了一个官方的项目,https://github.c

c#-从P / Invoke捕获DllNotFoundException

找到一个解决方案的职位:How do I handle a failed DllImport? 我正在编写一个应用程序,该应用程序根据主机使用的是Windows Vista系列还是NT系列版本检查操作系统版本以执行不同的操作.如果是Vista系列,它将加载一些DLL(使用DllImport),但不使用这些DLL.问题是,如果在不具有这些DLL

具有从C#到非托管驱动程序的嵌入式指针的编组结构

我正在尝试使用P / Invoked DeviceIoControl()调用将C#(.NET Compact Framework 3.5)与Windows CE 6 R2流驱动程序接口.对于IOCTL代码之一,驱动程序需要一个DeviceIoControl输入缓冲区,该缓冲区是以下包含嵌入式指针的非托管结构: typedef struct { DWORD address; const v

如何将C数组映射到C#?

我的问题与尝试从C#调用用C编写的函数有关.我查看了C库附带的头文件,以了解C dll中存在的功能.这是我看到的: C代码(用于名为“ LocGetLocations”的函数): typedef enum { eLocNoError, eLocInvalidCriteria, eLocNoMatch, eLocNoMoreLocations, eLocConnecti

C#-IntPtr不包含本机值

我有一个本机方法,必须将字节数组传递到.NET包装器. natove方法如下所示: __declspec(dllexport) int WaitForData(unsigned char* pBuffer) { return GetData(pBuffer); } GetData使用malloc分配内存区域,并将一些数据(字节流)复制到其中.该字节流是通过套接字连接接收的.返

C#-P / Invoke-Int 4字节,尝试更改为UInt,但会导致问题

错误似乎很常见,但在这里是: eCA1901 P/Invoke declarations should be portable As it is declared in your code, parameter 'dwExtraInfo' of P/Invoke 'NativeMethods.mouse_event(int, int, int, int, int)' will be 4 bytes wide on 64-bit platforms. This

PInvoke用于复杂的方法调用C#

我正在使用3. party SDK,它由.dll,.lib和.h文件组成.我正在使用.dll进行PInvoke.和.h文件以查看函数名称和参数. (因此,我没有使用.lib文件). SDK非常复杂,因此事实证明,制作PInvoke包装器是一个挑战.所有功能/结构/枚举均在.h文件中定义. 我尝试包装的函数称为InitBaseComponent,

C#-在pInvoke中封送结构数组

我在C#中有这样的结构: [StructLayout(LayoutKind.Sequential, Pack = 8)] public struct MyStruct { [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 17)] public string StringValue; public uint IUintValue; } 以及本机代码中的对应结构 struct MyStruct {

从静态C库调用函数

我有一个本地C库(静态即.lib目标).我希望在我的C#项目中使用此文件中的某些功能.对于dll,我可以使用它们.如何针对静态库执行此操作? 我读了this question,David的回答是,您只能为dll而不是lib进行pinvoke.解决方法:通过将静态库链接到更大的模块来使用它.在Windows中,这意味着DLL或

C#使用FILE *参数调用C函数

我在C库的结构中定义了以下函数指针: struct SOME_STRUCT { [...] uint8_t(*printinfo) (SOME_STRUCT * ss, FILE * hFile); [...] } 此函数将一些数据写入文件句柄hFile,我想从C#调用它.在C#中,我有: [StructLayout(LayoutKind.Sequential)] public struct SomeStruc

封送结构中的IntPtr []导致midiStream函数错误,但将数组展开到一堆字段工作

我正在尝试使用C#的Windows多媒体MIDI功能.特别: MMRESULT midiOutPrepareHeader( HMIDIOUT hmo, LPMIDIHDR lpMidiOutHdr, UINT cbMidiOutHdr ); MMRESULT midiOutUnprepareHeader( HMIDIOUT hmo, LPMIDIHDR lpMidiOutHdr, UINT cbMidiOutHdr ); MMRESULT midiStreamOut(

C#和PInvoke进入32/64位DLL

这个问题已经在这里有了答案:            >            Target 32 Bit or 64 Bit native DLL depending on environment                                    3个 我正在创建一个类库,希望最终将其放在NuGet上.现在,它

C到C#P用指针结构调用

我正在尝试创建一个C#接口,该接口从外部C DLL接收回调. 回调的参数包含指向C结构的指针,而C结构本身也具有指向不同结构的指针. 回调签名: typedef application_event_result (*application_event_ptr)(abuffertype* read_buffer, abuffertype* write_buffer); C中的缓冲区结构定

c#-.NET运行时错误80131506-将Lambda传递给本机函数

所以我收到这个错误,看起来好像是一个损坏的垃圾回收: Application Crashes With “Internal Error In The .NET Runtime” 完整的错误是: The process was terminated due to an internal error in the .NET Runtime at IP 71C571C8 (71B20000) with exit code 80131506. 它正在

编组带有字符串的结构时,PInvoke错误

我有一个C结构 struct UnmanagedStruct { char* s; // Other members }; 和一个C#结构 struct ManagedStruct { [MarshalAs(UnmanagedType.LPStr)] string s; // Other members } C库公开 extern "C" UnmanagedStruct __declspec(dllexport) foo( char* input )

Interop C#/ C的问题:AccessViolationException

感谢您的帮助. 我在C中有这个琐碎的功能: __declspec(dllexport) Point* createPoint (int x, int y) { Point *p; p = (Point*) malloc(sizeof(Point)); p->x = x; p->y=y; return p; } Point是具有两个int字段x和y的非常简单的结构. 我想从C#调

c#-LLVM绑定中的不平衡堆栈警告

经过数周的努力,我设法编写了使用LLVM进行JIT编译的F#程序.但是,每当我在附有调试器的Visual Studio 2010中运行程序时(即通过按F5键),都会收到以下警告: 现在,在使用Windows 7上网本时,对于每个PInvoke调用都会收到此警告,但在使用Windows Vista桌面时,仅对某些调用会得到警告. 遇

c#-如何解决此“ P / Invoke声明应可移植”的问题?

这段代码: [DllImport("shell32", CharSet=CharSet.Unicode)] private static extern int SHGetFileInfo(string pszPath, uint dwFileAttributes, out SHFILEINFO psfi, uint cbFileInfo, uint flags); 导致以下代码分析问题: CA1901 P/Invoke declarations should be porta

将DIB转换为DDB?

我正在开发一个剪贴板管理器(可以在这里看到:http://flamefusion.net/software/shapeshifter). 但是,我目前遇到的位图(bmp)问题无法真正将自身正确插入剪贴板.我的第一种方法是使用SetClipboardData. var hBitmap = bmp.GetHBitmap(); SetClipboardData(CF_BITMAP, hBitmap); 我

以uint []的形式将C dll中的无符号长数组返回到C#中,为什么会引发MarshalDirectiveException错误?

我正在使用一个指向无符号长数组的指针(处理数据),然后将其发送回C# 在C#中 [DllImport("some_dll.dll")] private static extern uint[] func(uint[]x, uint[]y, uint[]z); C头 _declspec(dllexport) unsigned long* _stdcall func(unsigned long[], unsigned long[],unsig

将结构传递给非托管代码时C#-System.AccessViolationException

我正在尝试使用来自C#的非托管API,并将头撞墙. (关于PInvoke,我是个初学者.) 头文件的相关部分如下所示: #define CTAPICALL __stdcall #ifdef __cplusplus extern "C" { #endif extern BOOL CTAPICALL ctTagReadEx(HANDLE,LPCSTR,LPSTR,DWORD,CT_TAGVALUE_ITEMS*

如何在C#中使用PInvoke强制对dll函数进行参数计数

我写了一个C dll,其中包含一个接受4个参数并返回数字的函数.然后,我创建了一个C#应用程序,并使用PInvoke调用了dll函数.一切正常.然后,我没有将dll函数中的参数从4更改为3.但是我没有在C#中更改方法签名(DllImport方法签名).令我惊讶的是,该调用仍然可以从C#成功执行,但是从dll函数

在C#中调用delphi函数

我正在从C#的dll中调用一个delphi函数. 这是delphi函数签名- function CALinkDecode(sCode: PWideChar; SubscriberID, MailshotID, LinkID: PDWORD): PAnsiChar; stdcall; 这就是我所说的. string input = "qvoxyetvr7wksss2zbrmr"; int cas, cam, cal; var