草庐IT

CallingConvention

全部标签

c# - 在 C# 中编码一个 char**

我正在与采用char**(即指向字符串的指针)的代码进行交互:intDoSomething(Whatever*handle,char**error);基本上,它需要一个状态句柄,如果出现问题,它会返回错误代码和可选的错误消息(内存是在外部分配的,并通过第二个函数释放。那部分我已经弄明白了:)).但是,我不确定如何在C#中处理in。我目前拥有的:[DllImport("mydll.dll",CallingConvention=CallingConvention.Cdecl)]privatestaticunsafeexternintDoSomething(IntPtrhandle,byte

c# - 如何制作从 C# "Thread-safe"调用的 C (P/invoke) 代码

我有一些使用单个全局变量的简单C代码。显然这不是线程安全的,所以当我在C#中使用P/invoke从多个线程调用它时,事情就搞砸了。如何为每个线程单独导入此函数,或使其成为线程安全的?我尝试声明变量__declspec(thread),但这导致程序崩溃。我还尝试制作一个C++/CLI类,但它不允许成员函数是__declspec(naked),我需要(我正在使用内联汇编)。我在编写多线程C++代码方面经验不足,因此可能缺少某些内容。下面是一些示例代码:C#[DllImport("MyDll.dll",CallingConvention=CallingConvention.Cdecl)]pu

c# - 如何检测鼠标点击?

我如何检测Windows上的鼠标点击?(XP/Vista/7)。例如,当我的应用程序正在运行时,它会检测用户是否单击了某些内容(不是在该应用程序用户界面上,而是在Windows用户界面上)。如果是,执行另一个进程。我不知道这是否可行,我希望有人能给我一些指导。谢谢! 最佳答案 如果你想拦截任何鼠标点击、移动、鼠标滚轮点击等,你需要写一个鼠标钩子(Hook)。如果您想在自己的应用程序之外跟踪鼠标事件,这是AFAIK的唯一方法。如果要安装Hook,则需要从User32.dll文件导入SetWindowsHookEx(...)函数。它涉及

c# - 如何在 C# 中打印 PCL 文件?

我有一个使用“打印到文件”生成的PCL文件。在C#中以编程方式打印此文件的最佳方法是什么?(当然,我要打印的打印机支持PCL。)我知道我可以通过从提示中调用来打印:copyfilename.pcl//location/printername所以我想我也可以通过编程方式做同样的事情(使用复制)...我想知道是否有更简洁的方法来做到这一点,比如使用PrintDocument。请注意,当我使用PrintDocument时:varpd=newPrintDocument{DocumentName=@"filename.pcl";PrinterSettings={PrinterName=@"\\l

C# 使用 ICC 配置文件将 RGB 值转换为 CMYK?

这个问题似乎在互联网和SO的许多地方都有发布,但我找不到满意的答案:(如何使用ICC配置文件将RGB值转换为CMYK值?我有最接近的答案在那里,它解释了如何从CMYK转换为RGB,而不是相反,这正是我需要的。(http://stackoverflow.com/questions/4920482/cmyk-to-rgb-formula-of-photoshop/5076731#5076731)float[]colorValues=newfloat[4];colorValues[0]=c/255f;colorValues[1]=m/255f;colorValues[2]=y/255f;co

c# 与 c++ ssl_connect

你好,我有一个使用openssl和winapi套接字的C++应用程序,代码如下所示:sock=socket(AF_INET,SOCK_STREAM,0);if(connect(my_sock,(structsockaddr*)&dest_addr,sizeof(dest_addr))==0){WSAIoctl(my_sock,SIO_KEEPALIVE_VALS,&alive,sizeof(alive),NULL,0,&dwSize,NULL,NULL);}}.....SSL_load_error_strings();SSL_library_init();ctx=SSL_CTX_new

c# - 从 C# 调用非托管 .dll 的性能

使用以下语法从C#应用程序调用以C++编写的.dll会增加多长时间的典型开销?[DllImport("abc.dll",EntryPoint="xcFoo",CallingConvention=CallingConvention.Cdecl)]publicexternstaticResultFoo(outIntPtrsession,[MarshalAs(UnmanagedType.FunctionPtr)]ObjectCallbackcallback,UInt64turnKey,stringserverAddress,stringuserId,stringpassword);有没有更有

c# - C# 中用于基于平台导入的预处理器指令

根据可执行文件是64位还是32位,在C#中寻找用于导入dll的预处理器指令:#ifWIN64[DllImport("ZLIB64.dll",CallingConvention=CallingConvention.Cdecl)]#else[DllImport("ZLIB32.dll",CallingConvention=CallingConvention.Cdecl)] 最佳答案 这是您需要做的。首先,进入Project->Properties...并转到构建选项卡。在那里,在标有“条件编译符号”的文本框中,添加WIN32适用于您的x

c# - C# 中用于基于平台导入的预处理器指令

根据可执行文件是64位还是32位,在C#中寻找用于导入dll的预处理器指令:#ifWIN64[DllImport("ZLIB64.dll",CallingConvention=CallingConvention.Cdecl)]#else[DllImport("ZLIB32.dll",CallingConvention=CallingConvention.Cdecl)] 最佳答案 这是您需要做的。首先,进入Project->Properties...并转到构建选项卡。在那里,在标有“条件编译符号”的文本框中,添加WIN32适用于您的x

c# - 在 C# DllImport 中使用 32 位或 64 位 dll

情况是这样的,我在我的dot.net应用程序中使用基于C的dll。有2个dll,一个是32位版本,名为MyDll32.dll,另一个是64位版本,名为MyDll64.dll。有一个静态变量保存DLL文件名:stringDLL_FILE_NAME。它的使用方式如下:[DllImport(DLL_FILE_NAME,CallingConvention=CallingConvention.Cdecl,EntryPoint=Func1")]privatestaticexternintis_Func1(intvar1,intvar2);到目前为止很简单。如您所想,该软件是在“任何CPU”开启的情
12