Tag: dllimport

鼠标在外部C#代码中移动到游戏窗口中

我正在玩游戏,每次我需要移动鼠标并点击进入游戏的屏幕以获得游戏点,所以我试图通过c#编写代码来自动点击并移动游戏屏幕中的鼠标..我得到了一些帮助,所以鼠标点击问题解决了,但我无法在游戏的屏幕上移动鼠标..你能告诉我该怎么办? 我应该使用“SetWindowsHookEx”或其他方法在游戏窗口中移动鼠标吗? 请告诉我该怎么办.. 我点击下面的“点击”代码,工作正常: public class ClickGameScreen { [DllImport(“user32.dll”)] static extern bool ClientToScreen(IntPtr hWnd, ref Point lpPoint); [DllImport(“user32.dll”)] internal static extern uint SendInput(uint nInputs, [MarshalAs(UnmanagedType.LPArray), In] INPUT[] pInputs, int cbSize); internal struct INPUT { public UInt32 Type; public MOUSEKEYBDHARDWAREINPUT Data; } [StructLayout(LayoutKind.Explicit)] internal struct MOUSEKEYBDHARDWAREINPUT { [FieldOffset(0)] public MOUSEINPUT Mouse; } internal struct MOUSEINPUT { […]

C#DllImport和Marshaling char **

我在c#中工作,我需要在c ++ dll中使用这个函数: extern “C” char IMPEXP __stdcall service_GetParameter ( const char* parameter, const int value_lenght, char** value ); 我在c ++代码中使用它如下: char *val = new char[256]; service_GetParameter(“firmware_version”, 255, &val); AnsiString FirmwareVersion = val; delete[] val; 如何导入此函数并在c#中使用它? 提前致谢

未处理的exception:System.AccessViolationException:尝试读取或写入

下面是我的c ++ DLL // DLL.cpp : Defines the exported functions for the DLL application. #include “stdafx.h” //#include #include using namespace std; typedef void (*FunctionPtr)(int); void (*FunctionPtr1)(int); extern “C” __declspec(dllexport)void Caller(); extern “C” __declspec(dllexport)void RegisterFunction(FunctionPtr func_ptr); extern void Caller() { int i = 10; FunctionPtr1(i); } extern void RegisterFunction(FunctionPtr func_ptr1) { FunctionPtr1 = func_ptr1; } 这个DLL将从c#引用函数名称并将参数传递给c#函数。这是我的c#代码 […]

在循环中使用方法Marshal.PtrToStructure时访问冲突exception

在我的程序(C#)中,我使用方法Marshal.PtrToStructure转换对象在循环中添加内存地址到结构。 在第一个元素,这项工作是正常的。 但是在第二个元素处,发生访问冲突exception。 访问冲突exception仅在win 7(64位)上发生,在win xp(32位)上不会发生。 我不知道原因和解决方案。 请帮我。 注意:我使用.NET Framework 3.5。 代码如下: [StructLayout(LayoutKind.Sequential)] public struct gpc_vertex { public float x; public float y; }; private ArrayList DoPolygonOperation() { IntPtr currentVertex = vertexList.vertexes; gpc_vertex oVertext = new gpc_vertex(); for (int j = 0; j < vertexList.num_vertices; j++) { PositionF pos = new PositionF(); oVertext = (gpc_vertex)Marshal.PtrToStructure(currentVertex, […]

通过引用传递给非托管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#

我来自电气工程师背景,因此我的知识很少关于C#,DLL等….我想将c函数用于C#。 我知道有一些关于这个的post,但我找不到一个足够简单的post。 目前,我在USB端口上有C函数调用windows API来读/写。 首先创建.dll我需要头文件吗? 因为我将以下函数decleration函数放入标题中。 我在堆栈溢出和Internet上看到的示例只使用一个简单的.c文件,我可以摆脱头文件吗? __declspec(dllexport) LMUSB_HANDLE __stdcall InitializeDevice(unsigned short usVID, unsigned short usPID, LPGUID lpGUID, BOOL *pbDriverInstalled); __declspec(dllexport) LMUSB_HANDLE __stdcall InitializeDeviceByIndex(unsigned short usVID, unsigned short usPID, LPGUID lpGUID, DWORD dwIndex, BOOL bOpenDataEndpoints, BOOL *pbDriverInstalled); __declspec(dllexport) BOOL __stdcall TerminateDevice(LMUSB_HANDLE hHandle); __declspec(dllexport) BOOL __stdcall WriteUSBPacket(LMUSB_HANDLE hHandle, unsigned char *pcBuffer, unsigned long ulSize, unsigned long […]

在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#控制台程序代码 […]

使用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并要​​求安装程序与我正在开发的应用程序? 谢谢你!

Windows 8以编程方式打印Postscript文件

我在打印Postscript文件时发现了一个奇怪的问题。 所以这是我的设置: 我有一台Windows 8 PC ,在这台PC上有一个C#应用程序 “NetworkPrintTest.exe”,它在执行时应该打开一个PDF,生成一个Postscript文件,最终应该打印出来。 但它没有做任何事情。 我没有收到错误,但它也不会打印。 同样的程序在Windows 7上运行没有错误,我甚至让打印机打印文件。 如上所述,.ps文件在两个操作系统上都成功生成,但打印失败。 这是我应该打印文件的源代码。 public static bool SendBytesToPrinter(string szPrinterName, IntPtr pBytes, int dwCount, params string[] docName) { int dwWritten = 0; IntPtr hPrinter = new IntPtr(0); DOCINFOA di = new DOCINFOA(); bool flag = false; di.pDocName = “print document”; if (docName.Length > 0) di.pDocName = docName[0]; […]

C#编组char **和unsigned char **

这是问题 – 我需要在C#应用程序中使用一些C图像处理库。 DllImport缺乏经验让我很难受。 我需要使用的function如下: IMAGEPROCESS_API const int importImage ( const unsigned char* image, const char* xmlInput, unsigned char** resultImage, char** xmlOutput ); 因此,它接受原始图像数据,xml包含参数和图像宽度’高度,然后返回处理后的图像和一些xml报告。 现在我试图像这样接近它: [DllImport(“imageprocess.dll”,CallingConvention = CallingConvention.StdCall,EntryPoint =“importImage”,CharSet = CharSet.Ansi)] private static extern int ImportImageNative(IntPtr imageData,String xmlDescriptor,out IntPtr processedImage,out IntPtr xmlOut); 但没有任何成功。 有什么建议应该怎么办? 编辑:仍然没有运气((现在由凌乱的C ++ CLI完成)