Tag: pinvoke

通过引用传递给非托管C DLL函数后,struct保持不变

我正在为C#编写一个非托管C DLL包装器。 在DLL中我有以下方法返回指针结构(接近结尾的结构代码): struct zint_symbol *ZBarcode_Create() { struct zint_symbol *symbol = (struct zint_symbol*)calloc(1, sizeof(struct zint_symbol)); if (!symbol) return NULL; symbol->symbology = BARCODE_CODE128; strcpy(symbol->fgcolour, “000000”); strcpy(symbol->bgcolour, “ffffff”); strcpy(symbol->outfile, “out.png”); symbol->scale = 1.0; symbol->option_1 = -1; symbol->option_3 = 928; // PDF_MAX symbol->show_hrt = 1; // Show human readable text return symbol; } 我使用的外部方法是: extern struct zint_symbol* ZBarcode_Create(void); […]

如何将C函数签名转换为C#并在本机DLL中调用该函数?

int __stdcall getProps( /* [ in ] */ void * context, /* [ in ] */ const UINT32 index, /* [ in ] */ WCHAR * const pwszFilterPath, /* [ in, out ]*/ UINT32 * const pFilterPathSizeInCch, /* [ in ]*/ WCHAR * const pwszFilterName, /* [ in, out ] */ UINT32 * const pFilterNameSizeInCch […]

使用p / invoke和win-api监听音频线路输入(C#)

在过去的几天里,我试图用win-api(winmm.dll)编写一个小程序来监听音频线路输入。 我可以调用诸如waveInOpen之类的api函数,但我无法弄清楚如何使用这些函数来实现我的目标。 问题是 – 有人可以简单告诉我如何使用这些API(C#)从音频线获取数据。

在DllImport中使用Unicode字符串和用Rust编写的DLL

我试图从C#程序调用Rust编写的DLL。 DLL有两个简单的函数,它们以不同的方式进行stings并打印到控制台。 Rust DLL代码 #![crate_type = “lib”] extern crate libc; use libc::{c_char}; use std::ffi::CStr; #[no_mangle] pub extern fn printc(s: *const c_char){ let c_str : &CStr = unsafe { assert!(!s.is_null()); CStr::from_ptr(s) }; println!(“{:?}”, c_str.to_bytes().len()); //prints “1” if unicode let r_str = std::str::from_utf8(c_str.to_bytes()).unwrap(); println!(“{:?}”, r_str); } #[no_mangle] pub extern fn print2(string: String) { println!(“{:?}”, string) } C#控制台程序代码 […]

来自c#的PInvoke c ++ dll – 尝试加载格式不正确的程序。 (HRESULTexception:0x8007000B)

尝试使用Dll Import从c#访问旧的c ++ dll。 现在四天在网上搜索aprox 4天没有成功。 我正在尝试使用asp.net mvc 3网站.net 4中的c ++ dll。 我已将平台目标更改为x86。 我在iis中的应用程序池中将“启用32位应用程序”设置为true。 将Windows Server 2008 R2与iis 7.5配合使用 有没有办法调试这个或获得有关可能出错的更多信息? ASP.NET P / Invoke链接“尝试加载具有不正确格式的程序”指出: “要使用32位dll,您的Web应用程序必须以32位模式运行,这通过将IIS切换为以32位模式运行来完成”,并提供有关如何更改此内容的链接,但这似乎只涉及IIS 6和asp.net 2 提前致谢! 最好的祝福 编辑1:在c#中错误地声明c ++方法调用会导致此错误吗? 读错误可以猜测,调用具有3个参数的函数应该接收4将导致此错误。

停止进程从C#显示一个窗口

我正在尝试自动化在启动时创建GUI窗口但没有用户交互的应用程序,但我无法弄清楚如何隐藏实际窗口。 我尝试过使用ProcessStartInfo: Process.Start(new ProcessStartInfo { UseShellExecute = false, CreateNoWindow = true, WindowStyle = ProcessWindowStyle.Hidden, // other properties here }); 但窗口仍然显示出来。 我也试过旋转等待窗口存在,然后隐藏它: while (process.MainWindowHandle == IntPtr.Zero) {} ShowWindowAsync(process.MainWindowHandle, SW_HIDE); 遗憾的是,这使得窗口闪烁大约1/16秒左右,如果可能的话,我想避免使用它。 我目前的想法是创建一个钩子 ,但我不确定抓什么钩子,也不确定它是否会起作用。 有小费吗?

使用Shell32进行P / Invoke,绕过Interop.Shell32.dll生成

所以我使用以下代码将每个扩展文件属性转储到调试控制台… ShellClass shellClass = new ShellClass(); Folder dir = shellClass.NameSpace(Path.GetDirectoryName(sFilePath)); FolderItem item = dir.ParseName(Path.GetFileName(sFilePath)); for (int i = 0; i < 267; i++) { System.Debug.WriteLine(dir.GetDetailsOf(item, i)); } 由于Shell32是一个非托管库,我不能直接在程序中嵌入DLL资源,它必须生成一个互操作助手DLL。 任何人都知道Shell32中的这些函数的DLLImport命令行来绕过整个生成的互操作DLL? 我检查了pinvoke.net,在Shell32条目下,他们要么没有我想要的东西,要么它没有被命名为我所期待的。 如果无法使用DLLImport来实现这一点,那么是否有人知道使用托管DLL提取有关文件的所有扩展属性的方法,或者至少有一种方法可以在我不需要生成帮助DLL并要​​求安装程序与我正在开发的应用程序? 谢谢你!

如何使用libFLAC读取c#中的FLAC标记

libFLAC库是否有.net c#包装器? 如果没有,我如何在.net框架c#应用程序中使用libFLAC读取FLAC标记? 如果没有,是否有其他开源库来读取c#中的flac标签? 谢谢!

C#中的C ++“system()”

我目前正在用C#开发一个应用程序,它需要像“命令提示符”那样工作,因此我想知道C ++是否具有function int system ( const char * command ); 在cstdlib存在于C#中? 还将接受对包含此函数的动态链接库的引用。

C#pinvoke结构使用union和数组

我没有定义正确的C#代码来使用C ++库,它定义了一个带有union和数组的复杂结构,我在执行C ++代码时不断得到一些内存exception,我很确定它是由于这个原因。 c ++结构如下,忽略枚举和其他结构定义(如果需要,我会发布它们,但它们非常简洁) typedef struct { DG_CCTALK_APP_EVT_CODE eEventCode; DG_CCTALK_APP_EVT_TYPE eEventType; int iTime; int iHandle; unsigned char uchAddress; DG_CCTALK_BILL_INFO sBillInfo; int iBillAmount; union { long lData; int iData; unsigned char ucArray[128]; char *cString; void *pvoid; } uData; void *_private; // for use by cctalk app layer } DG_CCTALK_APP_EVT, *PDG_CCTALK_APP_EVT; 而C#代码是这样的: [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Explicit)] public struct Anonymous_92d21a81_2a8b_42f4_af32_f7606aa9cf40 […]