我想在mono中使用文件io函数(打开、读取、写入)和伪终端()函数(grantpt、unlockpt、ptsname)。
翻译参数和返回值是微不足道的(不过,如果你能验证它们,我将不胜感激),但我找不到相应的库。
我的linux发行版是Arch Linux on ARM (Raspberry PI)。由于ARM平台只有32位,所以我可以只对int/size_t等使用int32
非常感谢。
internal class LinuxNativeMethods
{
//int open(const char *pathname, int flags);
[DllImport(
我有一个运行良好的非托管C++ Windows控制台应用程序。我想把它放在C#里。我已经为必要的Kernel32.dll符号执行了DllImport语句:
[StructLayout(LayoutKind.Sequential)]
internal struct DiskGeometry
{
public long Cylinders;
public int MediaType;
public int TracksPerCylinder;
public int SectorsPerTrack;
public int BytesPerSector;
}
我正在尝试为winpcap编写一个C#包装器。当我尝试调试时,它会给出警告PInvokeStackImbalance,但是pcap_findalldevs完成了它的工作。但我认为这会导致程序中的内存泄漏。顺便说一句,这段代码来自networkminer,我写这段代码并不是为了理解winpcap和包装。
This is the method in WinPcap
int pcap_findalldevs( pcap_if_t ** alldevsp, char * errbuf )
这是我在我的程序中写的
[DllImport("wpcap.dll", CharSet = C
我找到了关于如何通过wj32读取指定进程的命令行的。我试着在C#上翻译这个例子,我有几个问题。我可以得到一个指向字段CommandLine of RTL_USER_PROCESS_PARAMETERS结构的有效指针,但是很难得到字符串本身。我应该使用不安全的代码吗?如何使用to 32的示例正确地获得进程的CommandLine?
using System;
using System.Runtime.InteropServices;
namespace CommandLine {
internal static class NativeMethods {
[DllImport(
我正在尝试使用kernal32.dll中的几个函数。但是,当我的应用程序试图调用第一个函数时,它会抛出一个EntryPointNotFoundException Unable to find an entry point named 'SetDllDirectory' in DLL 'kernel32.dll'.
public class MyClass
{
/// <summary>
/// Use to interface to kernel32.dll for dynamic loading of similar DLLs.
如何获得与显示外部进程的主窗口相关的事件?
我使用以下命令启动该过程:
pi = new ProcessStartInfo();
[...]
Process.Start(pi)
然后我想要获得主窗口出现的瞬间,并使用以下命令调整大小和移动它:
[System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)]
internal static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nH
我有一个引用C++ dll的.Net标准项目 现在,我使用DllImport让它正常工作。 我想创建一个Nuget包,它与所有目标的相关dll一起提供。 我假设我将不得不为所有目标(Windows x64、Windows x86、Linux等)构建C++库。很好。 现在我需要以某种方式将它们全部打包到nuget包中,但我不确定如何做到这一点。) How to add C++ library in a .NET Core project是类似的,但是对于.Net标准项目,答案是不正确的,这些项目有一个新的样式csproj,并且使用dotnet而不是nuget cli。此外,它也没有解释多个目标
下面是来自的教程。_flushall的输出是本教程中的“测试”,但我通过使用console.write()显示输出获得了"2“。有人能解释一下吗?
using System;
using System.Runtime.InteropServices;
class PlatformInvokeTest
{
[DllImport("msvcrt.dll")]
public static extern int puts(string c);
[DllImport("msvcrt.dll")]
internal static e
我正在尝试在C++/CLI项目的混合模式下使用MimeTex.dll。我包含的dll来自:#pragma comment(lib,"MimeTex.dll")
我试着调用这个方法:CreateGifFromEq("expression","path");
但是编译器通知它不知道CreateGifFromEq()方法。
我在网上找不到how to use MimeTex.dll in C++的资源。我只是发现如何在Pinvok的中使用它和C#,如下所示:
[System.Security.SuppressUnmanagedCodeSecurity(
在下面的代码中,为什么user32会导致错误?
我认为,通过在方法主体上添加[DllImport("user32.dll", CharSet = CharSet.Unicode)],然后我可以创建类似user32.IsWindowVisible(hWnd)的语句,但是代码行中的user32部分会导致错误。
以下是一个完整的例子。如果将此文件复制到visual studio中,将其复制到类文件中,则会看到以下错误:
using System.Collections.Generic;
using System.Runtime.InteropServices;
using Syste
我已经看到了大量通过文件启动外部应用程序的代码,但这不是问题所在。为了澄清我想要的行为:
对于给定的文件名,启动正确的进程。
如果没有关联的进程,正确的shell对话框应该会提示用户关联一个进程。
当应用程序启动时,这个应用程序需要转到Z顺序的后面(或者就在正在启动的应用程序后面)并停留在那里。
第三步是我做得不对的。我正在通过psd文件启动Photoshop,但当屏幕显示时,它会闪烁,因为我的应用程序为焦点而战。一旦启动正常,一切都好,但我不喜欢闪烁,而闪存屏幕显示。
到目前为止,我最好的尝试是:
using System;
using System.Diagnostic