我正在使用JCL的表达评估员TEvaluator(由barry kelly捐赠的奇妙创作).(谢谢你!)
背景
我使用了AddFunc方法.
function MyFunc:double;
begin
// calculations here
Result:=1;
end;
Run Code Online (Sandbox Code Playgroud)
您可以使用AddFunc方法使该函数可用:
AddFunc('MyFunc', MyFunc);
Run Code Online (Sandbox Code Playgroud)
这是问题......
我需要在一个对象上调用一个方法而不是一个独立的例程.
原因是我有一个提供值的对象列表.
说我们有一个车辆对象列表.每个对象都有一个权重函数.我希望能够使每个对象的重量可用于公式中.
一个愚蠢的例子,但很容易解释:
type
TVehicle=class
private
public
function Weight:double;
end;
function StrangeCalculation:double;
var
vehicle:TVehicle;
begin
for iVehicle = 0 to Count - 1 do
begin
vehicle:=GetVehicle(iVehicle);
// E2250 There is no overloaded version of 'AddFunc' that can be called with these arguments
eval.AddFunc(vehicle.Name, vehicle.Weight);
end;
Result:=eval.Evaluate('JeepTJWeight + FordF150Weight * 2');
end;
Run Code Online (Sandbox Code Playgroud)
我的选择:
AddVar()或AddConst() - 但这不是很好,因为如果值不可用,我需要能够引发异常.
具有独立函数的AddFunc().不能这样做,因为变量的名称(和数量)在运行时才是未知的.
如果找不到变量,则修改对象以添加回调.我实际上已经完成了这个,但需要编辑源代码的副本以回复它以实现此目的.
创建一个能够使用方法函数的AddFunc().
选项#3实际上已构建,但额外的AddFunc会更好.麻烦的是我不知道提供什么方法原型.我认为TMethod会是方式,但我的知识在这里太有限了...这是我的尝试不成功但我仍然得到"E2250在eval.AddFunc中没有可以使用这些参数调用'AddFunc'的重载版本" ()像以前一样打电话.
TFloat64MethodFunc = function(c:pointer): …Run Code Online (Sandbox Code Playgroud) 我开发了一个Windows服务来在目录中编写PDF文件.该服务将文件写入本地驱动器没有问题.但是当它尝试写入网络映射驱动器时,它会失败并将该文件写入应用程序目录中.
我目前正在开发基于连接到rs232端口的串行接口项目.然而,看到相当数量的笔记本电脑和/或PC似乎他们的rs232端口可能在未来5年内消失,我正在考虑将RJ45模块化端口用于我的项目(EIA/TIA 568).但是,我不太确定如何在通过Win32API访问端口时命名它(我在C++中编程).它目前被编程为"COM1".有谁知道如何找出这个端口被调用或如何配置它以便可以这种方式使用它?
我正在开发一个从串行端口读取数据并通过TCP连接发送数据的应用程序,反之亦然.不幸的是,从串口读取数据时,它永远不会停止.它不会检测EOF标记,也不会检测EOL或其他特殊字符.
那么,我如何通过C和Linux中的串口检测文件结束(或"连接结束")?
我正在寻找一个解决方案,以编程方式返回所有可用的串口与python.
目前我正在进入ls /dev/tty.*或ls /dev/cu.*进入终端列出端口并将它们硬编码到pyserial类中.
我正在 Linux 中通过串行线路发送/接收数据,我想找到字符之间的延迟。
Modbus 使用 3.5 个字符的延迟来检测消息帧边界。如果超过 1.5 个字符的延迟,则消息帧被声明为不完整的。
我正在用 C 编写一个快速程序,它基本上是
fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK);
// setup newtio
....
tcsetattr(fd, TCSANOW, &newtio);
for(;;) {
res = read(fs, buf, 1);
if (res > 0) {
// store time in milliseconds?
//do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
有什么方法可以测量这里的时间吗?或者我是否需要以不同的方式查看从串行线路中检索数据?
我还尝试连接到 SIGIO 以在有数据时获取信号,但我似乎一次获取 8 个字节的数据。
(是的,我知道存在一些 modbus 库,但我想在其他应用程序中使用它)
我有一些设计要为串行协议做,并且遇到了一些我认为必须在其他地方考虑过的问题。
所以我想知道是否有一些关于设计串行协议的最佳实践的建议。(请陈述一个易于验证的事实,或者如果您提出声明,请引用信誉良好的来源。)也欢迎对网站/书籍的一般建议。
特别是我必须处理诸如
有什么建议?
我已连接到OBDKey并获取数据.当车辆断电(点火开关关闭)时,我想立即关闭我的程序如何检查点火开关是否关闭?
我有一个DevExpress xtraGrid,我想绑定.当我尝试绑定时,编译器会给出一个错误,即gridView数据源是只读的.我尝试了以下方法,我的代码是
NorthwindDataContext db = new NorthwindDataContext();
var r = from p in db.Orders
select p;
var r2 = from p in db.Order_Details
select p;
gridView1.DataSource = r;
gridView2.DataSource = r2;
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:属性或索引器'DevExpress.XtraGrid.Views.Base.BaseView.DataSource'无法分配 - 它是只读的
我在gridView上检查了我的列属性,它不是只读的.为什么我收到此错误?实际上我的网格是空的,我打算将它绑定到数据库.
是否有更好的方法来发送串行中断然后是setcommbreak - delay - clearcommbreak序列?
我必须与一个微控制器通信,该微控制器使用串行中断作为115k2上数据包的开始,而setcommbreak有两个问题:
115k2,突破远低于1ms,它将获得时间关键.
由于中断必须嵌入在正确位置的数据包流中,我预计fifo会出现问题.
有没有更好的方法来做到这一点,而没有将串行通信移动到没有fifo的线程?UART通常为16550+
我可以选择微控制器设置可以切换(其他固件)为更常规的数据包格式,但手册警告说,"中断"方式具有串行硬件完整性检查功能.
编译器是Delphi(2009/XE),但欢迎使用任何代码或甚至只是参考.