我想用Delphi(2009 - 所以我有通用字典类)写一些类似于C#代码的东西:
Dictionary<Type, Object> d = new Dictionary<Type, Object>();
d.Add(typeof(ISomeInterface), new SomeImplementation());
object myObject = d[typeof(ISomeInterface)];
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
提前致谢,
斯托伊奇
以下代码(仅用于演示问题)构建并在Delphi 2010中工作.在Delphi 2009中,编译器失败并显示"E2035实际参数不足".
program Project50;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
TMyProc = reference to procedure(param: integer);
var
a: TProc;
b: TMyProc;
begin
b := procedure (param: integer)
begin
end;
a := TProc(b); // <-- [DCC Error] Project50.dpr(19): E2035 Not enough actual parameters
end.
Run Code Online (Sandbox Code Playgroud)
我发现只有一个非常难看的黑客来解决这个问题(a:TProc绝对b).有没有人知道这个编译器缺陷的更好的解决方法?
[TProc字段实际上隐藏在可以存储各种'可执行'代码的记录中 - TProcedure,TMethod和TProc.Casting用于将特定的匿名proc存储到此字段中.]
我创建了一个Delphi应用程序,它利用ODBC数据源访问csv格式的文本文件.该驱动程序是"Microsoft Access文本驱动程序".但是当我在Windows 7计算机上部署我的应用程序时它不起作用,因为这个驱动程序不可用(odbcad32中只有两个可用:sql native client和sql server)
我该如何安装这个驱动程序?我曾尝试安装MDAC,但它没有做任何事情.没有错误或anythinig,但它只是显示一个快速滚动条,就是这样.我听说在Windows 7上已经被WDAC取代了MDAC.
编辑:我应该添加这是Windows 7 Home,而不是Professional.
最近我注意到我们的一个应用程序在非主题Windows上绘制错误.
工具栏是由嵌套在TToolbar中的TSpeedButtons构建的,而TToolbar又存在于页面控件中.
在主题Windows上一切都很好看.嗯,不好,但还可以.

但是,在非主题的Windows上,按钮内部会出现奇怪的垂直线条.

我已经四处搜索,但找不到任何有关此类问题的报告.(最有可能只是我的搜索功夫糟透了.)有人知道这个问题的描述,或者更好的是,修复?
我有以下定义.
type
TOmniTaskDelegate = reference to procedure(const task: IOmniTask);
Run Code Online (Sandbox Code Playgroud)
我应该使用什么类型的容器(应该在D2009中支持)来存储TOmniTaskDelegate实例的列表?目前我正在使用,array of TOmniTaskDelegate但我对此并不满意.
我正在尝试将此代码片段转换为Delphi,而我却陷入困境for each objWBL in colObjects.
if not objBcdStore.EnumerateObjects( &h10200003, colObjects ) then
WScript.Echo "ERROR objBcdStore.EnumerateObjects( &h10200003 ) failed."
WScript.Quit(1)
end if
for each objWBL in colObjects
WScript.Echo ""
WScript.Echo "Windows Boot Loader"
WScript.Echo "-------------------"
WScript.Echo "identifier " & GetBcdId( objWBL.Id )
If objWBL.Id = current then
if not objWBL.GetElement(BcdOSLoaderInteger_NumberOfProcessors, objElement ) then
WScript.Echo "ERROR WBL GetElement for " & Hex(BcdOSLoaderInteger_NumberOfProcessors) & " failed."
WScript.Quit(1)
end if
WScript.Echo "numproc " & objElement.Integer
if not objWBL.GetElement(BcdOSLoaderBoolean_UseBootProcessorOnly, objElement ) then
WScript.Echo …Run Code Online (Sandbox Code Playgroud) 如何在Smart Mobile Studio中使用正则表达式?例如,我如何在Object Pascal中编写以下示例?
var re = /\w+\s/g;
var str = "fee fi fo fum";
var myArray = str.match(re);
console.log(myArray);
Run Code Online (Sandbox Code Playgroud) 这个简单的程序无法编译.[用XE5和D10测试.]
program Project10;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.Classes;
function MakeProc: TThreadProcedure;
begin
Result := procedure begin end;
end;
begin
TThread.Queue(nil, MakeProc);
end.
Run Code Online (Sandbox Code Playgroud)
编译器报告错误
[dcc32错误] Project10.dpr(16):E2250没有可以使用这些参数调用的'Queue'的重载版本
在TThread.Queue通话中.
类TThread实现了两个Queue重载.
class procedure Queue(const AThread: TThread; AMethod: TThreadMethod); overload; static;
class procedure Queue(AThread: TThread; AThreadProc: TThreadProcedure); overload; static;
Run Code Online (Sandbox Code Playgroud)
我很确定我的代码应该匹配第二个重载.
我能找到的唯一解决方法是:
TThread.Queue(nil, procedure begin MakeProc; end);
Run Code Online (Sandbox Code Playgroud)
我做错了什么或这是编译错误?有没有比我丑陋的黑客更好的解决方法?
delphi ×10
delphi-2009 ×2
bcdstore ×1
containers ×1
ethernet ×1
javascript ×1
networking ×1
odbc ×1
regex ×1
toolbar ×1
windows ×1
wmi ×1