如果Delphi应用程序使用DLL(也是用Delphi创建的),那么在System.pas中声明的变量会有多个版本吗?
我刚刚阅读了,评论解释说,例如,System.IsConsole可以有多个版本,它们具有不同的值-在可执行文件中为真,在动态链接库中为假(如果它是使用$APPTYPE控制台编译的)。
但是其他变量似乎是为应用程序范围的值设计的,例如
MainInstance: LongWord; { Handle of the main(.EXE) HInstance }
CPUCount: Integer; { Number of CPU Cores detected }
Windows :结果发现安装Delphi10.4CE时破坏了我的应用程序(谢谢,DelphiCoder!);具体来说,是Windows中的一些东西被破坏了。在使用ProcessMonitor确保没有调用Delphi10.4(又名21.0)之后,我最终清除了所有10.4引用的注册表,完全重新构建(不清楚是否需要这样做),瞧,它再次工作了!我在添加此更新,以防有类似情况的人发现这个问题--记得先备份您的注册表,小心!
原始Post:10年前我用Matlab创建了几个DLL,使用C包装器,以便用Delphi提供它们。一旦我让他们工作,他们总是工作-直到今天!C包装器初始化函数中的代码位于下面的代码
我需要在我们的主应用程序中使用第三方dll。当我静态链接到提供的DLL时,它工作正常,并且我可以将DLL导出函数。但我们不希望我们的主应用程序在启动时依赖于这个dll,所以我尝试在需要的时候动态加载DLL:
DLLHandle := LoadLibrary('3rdparty.dll');
ret := GetLastError();
if DLLHandle = 0 then
begin
err := SysErrorMessage(ret);
Writeln(err);
end //...
但did不起作用: LoadLibrary函数返回0,LastErrorco
我遇到的一个问题是,我的dll中的代码与正常应用程序中的相同代码不同。经过一些调试后,我发现在dll中从未调用线程的OnTerminate。
type
TTest = class
private
public
procedure threadStart();
procedure threadEnd(Sender: TObject);
procedure lines(value: String);
end;
procedure TTest.threadStart();
var aThread : TThread;
begin
aThread :=
我维护Delphi 6遗留软件,它使用Delphi 2009 DLL中的以下文件目录选择功能:
function _SelectDirectory(ADirPath: ShortString): ShortString;
var OpenDlg: TFileOpenDialog;
begin
Result:='';
OpenDlg:=TFileOpenDialog.Create(nil);
try
OpenDlg.Options:=OpenDlg.Options+[fdoPickFolders];
if DirectoryExists(ADirPat
我使用文件/新项目/类库在VS2013中创建了一个DLL。然后我尝试在Delphi中动态加载它。但是Delphiis返回NIL for procedure GetProcAddress。
我的C# & Delphi代码看起来就像我在下面发布的一样。在代码中,GetProcAddress返回NIL。如果我遗漏了什么,请告诉我。
C#码
using System;
namespace TestDLL
{
public class Class1
{
public static string EchoString(string eString)