jjzjj

DllImport

全部标签

windows - DLL 从其父级(加载程序)获取符号

我正在将程序移植到MSWindows。该程序使用动态加载的插件。插件在主程序中引用符号。如果不解析所有符号,我什至无法让DLL通过链接器。有办法解决吗? 最佳答案 (抱歉,我想在评论中要求澄清,但我是新手,不允许。)当您说插件“在主程序中引用符号”时,是指引用函数还是数据?另外,您使用的是什么语言/编译器?假设它只是关于函数,并且在C/C++中:可以从.EXE中导出一个函数,就像它是一个DLL一样。只需在.EXE中的函数定义前指定__declspec(dllexport)即可。编译.EXE时,应生成一个.LIB文件,然后您可以在链接

c# - 在 C# 中使用 DllImport 的最佳方式以及如何从外部方法取回控制权

我在我的C#桌面应用程序中调用外部方法[DllImport(CONST_DLL_PATH)]internalstaticexternboolProcessXML(stringinputPath,stringoutputPath);我有几个问题:为DllImport指定EntryPoint或任何其他属性有多重要?如果ProcessXML失败怎么办,如何从外部方法取回程序执行控制权?DllImport有哪些替代方案?我想确保在ProcessXML失败的情况下,应将控制权返回给应用程序。 最佳答案 1)如果方法名称与DLL的条目名称不同-

c# - 通过外部 C# 代码在游戏窗口中移动鼠标

我在玩游戏,每次我需要移动鼠标并点击进入游戏屏幕来获得游戏点数,所以我尝试用C#编写代码来自动点击并在游戏屏幕中移动鼠标..我得到了一些帮助,所以鼠标点击问题解决了,但我无法在游戏屏幕上移动鼠标。你能告诉我我该怎么做吗??我应该使用“SetWindowsHookEx”还是其他方法在游戏窗口中移动鼠标??请告诉我我该怎么做..我得到的下面的“点击”代码,它工作正常:publicclassClickGameScreen{[DllImport("user32.dll")]staticexternboolClientToScreen(IntPtrhWnd,refPointlpPoint);[D

c# - 如果我为操作系统版本不支持的 API 使用 DllImport (C# .NET),会发生什么情况

我需要调用一些系统API,这些API仅受WindowsVista客户端或Windows2008Server及以上版本的支持。所以,我正在使用DllImport并调用这些方法。但是,我的WPF应用程序还必须支持旧平台(尽管客户端很少)。所以,我的计划是先检测操作系统,然后显示不同的屏幕,而不是调用那些不受支持的API。但我想知道预期的行为应用程序是否会因DllImport失败而无法加载甚至无法在旧平台上运行?我找不到任何关于此的文档。如果是这种情况,那么我将不得不完全避免使用这些API,或者必须为旧操作系统构建一个单独的应用程序版本。稍后我会自己测试并相应地更新到这里。但是,任何人都可以

windows - 如何在非托管 DLL 中发现可用的方法

像这样导入dll时:[DllImport("user32.dll")]staticexternboolSwapMouseButton(boolfSwap);privatevoidbutton1_Click(objectsender,EventArgse){SwapMouseButton(false);}如何知道user32.dll中有一个名为SwapMouseButton的方法,它接受一个bool参数并返回一个bool值?显然没有智能感知来挽救局面。那么是否有一个网站列出了所有这些,或者我可以在其中键入user32.dll的程序会为我发现它? 最佳答案

c++ - 在 Visual C++ 中使用 dllimport

我已经有几年没有做过任何Windows编程了,我对如何使用dllimport有点生疏。我有一些类似的东西:extern"C"{__declspec(dllimport)intmyFunct();}intmain(){cout我收到2个Unresolvedexternal链接器错误和一个警告/DELAYLOAD:myLib.dll被忽略,因为没有找到来自它的导入。我在这里错过了什么?我认为我可以将DLL添加到延迟加载路径,链接器将使用它来导入dll??这是一个没有.h或.lib文件的第3方DLL。 最佳答案 如果你想在运行时链接DLL

C#:将 DllImport 与继承相结合?

我在尝试将一些代码从java移植到c#时遇到了一些麻烦。首先,对java代码背后的关键概念进行一些解释:现有代码的关键概念是在外部库中导入/使用方法的类。这个类实现了一个接口(interface),它声明了外部库中的大部分方法。好处是能够创建像这样的实例Interface1instance=newclassImplementingInterface1();我正在尝试移植实现接口(interface)并从外部库导入方法的代码。实际上,我必须将该接口(interface)转换为抽象类,因为java接口(interface)使用包含预定义值的字段,这在.NET接口(interface)中实际

windows - __declspec(dllimport) 的必要性

我在看这个:ImportingFunctionCallsUsing__declspec(dllimport)而且我不明白为什么真的需要__declspec(dllimport)?为什么链接器不能在链接阶段将调用func1修补为调用DWORDPTR__imp_func1(IAT表地址)从而避免在源中单独声明的需要? 最佳答案 补丁指令空间不足可能是一个原因,但不是主要原因。即使有足够的空间,链接器仍然不会修补它以获得更好的性能。原因是链接器不做或修改编译器后端生成的代码,它只是用重定位信息修补地方。下面的例子不是很好的编码风格,但清楚

c# - 在 C# 中以编程方式设置 dllimport

我在我的解决方案中使用DllImport。我的问题是我有同一个DLL的两个版本,一个是为32位构建的,另一个是为64位构建的。它们都公开了具有相同名称和相同签名的相同函数。我的问题是我必须使用两个公开这些方法的静态方法,然后在运行时使用IntPtr大小来确定要调用的正确方法。privatestaticclassCcf_32{[DllImport(myDllName32)]publicstaticexternintfunc1();}privatestaticclassCcf_64{[DllImport(myDllName64)]publicstaticexternintfunc1();}

c# - 关于高分辨率性能计数器的解释及其与 .NET 秒表相关的存在?

在静态Stopwatch构造函数中,我们可以看到以下代码,它主要检查是否存在高分辨率性能计数器。staticStopwatch(){if(!SafeNativeMethods.QueryPerformanceFrequency(outFrequency)){IsHighResolution=false;Frequency=0x989680L;tickFrequency=1.0;}else{IsHighResolution=true;tickFrequency=10000000.0;tickFrequency/=(double)Frequency;}}在MSDN上它说QueryPerfo