我使用QtJambi
的端口Qt
,以Java
和启动我的应用程序时,它需要相应的dll
文件.
Loading library: 'qtjambi.dll'...
- using 'java.library.path'
at com.trolltech.qt.internal.NativeLibraryManager.loadNativeLibrary(Unknown
at com.trolltech.qt.internal.NativeLibraryManager.loadLibrary(Unknown Source)
at com.trolltech.qt.Utilities.loadJambiLibrary(Unknown Source)
at com.trolltech.qt.QtJambi_LibraryInitializer.<clinit>(Unknown Source)
... 7 more
Caused by: java.lang.RuntimeException: Library 'qtjambi.dll' wasn't found in PATH
Run Code Online (Sandbox Code Playgroud)
现在,配置我的项目(in )的最佳方法是什么,IntelliJ IDEA
以便它自动使用提供的dll
文件?
我不想修改PATH
或类似的东西,因为我希望这是仅限项目的解决方案,与OS
设置无关.
谢谢
我在客户的一台机器上遇到了这个奇怪的错误.它抛出FileNotFoundException,但是那个DLL肯定就在那个带有Executable的文件夹中..为什么它找不到它?请指教..
我想加载以下库。
librariesmozcrt19.dll
nspr4.dll
plc4.dll
plds4.dll
mozsqlite3.dll
nssutil3.dll
softokn3.dll
nss3.dll
Run Code Online (Sandbox Code Playgroud)
我知道单个库可以加载为
HMODULE hDLL=LoadLibrary(pDLLName);
Run Code Online (Sandbox Code Playgroud)
但我不知道如何加载多个库。
作为Linux上的新手我有一些问题:
如何从程序加载C运行时?
路径和文件名是什么?
在Windows上它是
C:\Windows\System32\msvcrt.dll
Run Code Online (Sandbox Code Playgroud)
顺便问一下,Linux上调用的DLL是什么?
什么是对应MS的功能LoadLibrary
和GetProcAddress
?
它们驻留在什么DLL中?
我必须链接哪个库才能访问它们?
在Windows下它是kernel32.lib
和kernel32.dll
.
最后:如何独立于目标平台编写Masm/JWasm代码?
是否有反映命令行上使用的目标arg的汇编符号?
编辑:我忘了问几个问题:Linux是64位还是32位?它是否使用与64位MS C相同的调用约定?我的意思是rcx,rdx,r8,r9等参数.
我正在开发一个将由我的EXE加载的DLL文件...所以EXE将调用第一个DLL程序,当这个程序加载时我想保持它打开,即使EXE关闭.例如,我有一个带有计时器的DLL,显示一个'Hello World'消息.DLL代码:
uses
SysUtils,
Classes,
Dialogs,
ExtCtrls;
{$R *.res}
type
TMyTimer = Class(TTimer)
public
procedure OnMyTimer(Sender: TObject);
end;
procedure DllMessage; export;
var
MyTimer: TMyTimer;
begin
MyTimer := TMyTimer.Create(nil);
MyTimer.Interval := 10000;
MyTimer.OnTimer := MyTimer.OnMyTimer;
end;
procedure TMyTimer.OnMyTimer(Sender: TObject);
begin
ShowMessage('Hello World');
end;
exports DllMessage;
begin
end.
Run Code Online (Sandbox Code Playgroud)
EXE加载如下:
procedure DllMessage; external 'Message.dll'
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
DllMessage;
end;
Run Code Online (Sandbox Code Playgroud)
当我关闭EXE时,我希望DLL继续运行并每隔10秒显示一条消息......这可能吗?
我想像 Process Hacker 那样卸载程序的 DLL。
我正在获取模块列表,它CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPALL, dwProcId)
允许我MODULEENTRY32
包含要卸载的 DLL 的信息。
但是FreeLibrary()
或者FreeLibraryAndExitThread()
不要做任何事情,因为程序正在使用 dll。这就是为什么我不明白 Process Hacker 在使用过程中是如何做到的。
所以这是我的问题:Process Hacker 如何卸载另一个程序使用的 dll?我试图查看源代码,但找不到任何东西。
现在我知道它会导致程序崩溃,但这不是问题。
我在C中有这个代码,我想移植到Delphi,但我不能让它工作.
.CPP代码
#include <Windows.h>
#include <io.h>
#include <stdio.h>
#include "GLibExp.h"
#pragma comment(lib, "GLib.lib")
void MyCFunc(LPCTSTR GStr)
{
GFile GVar = NULL;
GVar = GrfLoad(GStr, 1);
if ( !GVar )
{
printf("Error during loading!\n");
} else
printf("All fine!\n");
GrfFree(GVar);
system("pause");
}
void main()
{
CHAR StrG[MAX_PATH] = "Test.grf";
MyCFunc(StrG);
return;
}
Run Code Online (Sandbox Code Playgroud)
GLibExp.h
#ifndef GLibExpH
#define GLibExpH
#if defined(GRF_DLL)
#define GEXPORT __declspec(dllexport)
#else
#define GEXPORT extern
#endif
class CGFILE;
typedef CGFILE* GFile;
//typedef void* GFile; //Also works like this
#ifdef __cplusplus
extern …
Run Code Online (Sandbox Code Playgroud)