我们有自己的glue-layer-code-thingamajig,它允许我们在Win32 Delphi程序中托管.NET运行时.这使我们可以逐步过渡到.NET.
但是,我们不时会遇到一些问题,昨天我在SO上看到了一个答案,提到了Jcl的.NET主机实现,所以我想我会看看是否存在一些明显的差异.
原来有,但我不明白它做了什么,为什么,以及我是否需要做同样的事情.我当然会尝试一下,但我非常希望有人能够理解这个奇怪代码背后的原因告诉我它的作用.
随着时间的推移,我们可能会转而使用Jcl实现,但由于我们有即将发布的版本,除非为了解决当前的问题是绝对必要的,否则在此级别的代码进行重大改革是不合理的,所以请不要我只是建议我们切换.
无论如何,差异在于它们如何调用.NET函数来加载和绑定到.NET运行时,基本上它们是如何从.NET dll调用导出的函数的.
这是我的代码:
type
TCorBindToRuntimeEx = function(pwszVersion: PWideChar;
pwszBuildFlavor: PWideChar;
startupFlags: DWord; rclsid, riid: PGUID;
out ppv: IUnknown): Integer; stdcall;
...
var
CorBindToRuntimeEx : TCorBindtoRuntimeEx = nil;
...
CorBindToRuntimeEx := GetProcAddress(Runtimehandle, 'CorBindToRuntimeEx');
...
clsid := CLASS_CorRuntimeHost;
iid := IID_ICorRuntimeHost;
rc := CorBindToRuntimeEx('v2.0.50727', 'wks', 0, @clsid,
@iid, UnkRuntimeEngine);
Run Code Online (Sandbox Code Playgroud)
现在,我在这里简单地使用GetProcAddress将导出函数的地址加载到变量中,键入为stdcall函数指针,然后调用它.这有点工作.正如我所说,在一些情况下,奇怪的错误消息的一些问题.
好的,这是他们的代码,并特别注意汇编代码的功能.
function CorBindToRuntimeEx(pwszVersion, pwszBuildFlavor: PWideChar;
startupFlags: DWORD; const rclsid: TCLSID; const riid: TIID;
out pv): HRESULT; stdcall;
{$EXTERNALSYM CorBindToRuntimeEx}
...
var
_CorBindToRuntimeEx: Pointer = nil; …Run Code Online (Sandbox Code Playgroud) 我有一个以特定方式实现属性的类,以处理业务逻辑系统的一些自定义需求.
这种"特定方式"使得属性在数据绑定的上下文中不可操作.基本上,如果我将类的对象放到表单上,数据绑定在对象上找不到任何内容,并且该对象的属性检查器虽然列出了属性,但不允许我编辑它们.
我想知道的是,如果有一个接口或类似的东西,我可以在我的类中实现,它将向表单设计器报告可以绑定的属性,并实现代表数据绑定系统所需的自定义代码.我的财产.
请注意,我不需要在属性检查器中编辑对象的属性值,这只是属性非功能性的一个示例.我只需要数据绑定支持.
是否有这样的界面,如果是这样,它是什么?
我们举一个简单的例子.
我们假设我有这门课程:
public class CustomDataBinding : Component
{
private Dictionary<String, Object> _Properties = new Dictionary<String, Object>();
public CustomDataBinding()
{
_Properties["Property1"] = 10;
_Properties["Property2"] = "Test";
}
}
Run Code Online (Sandbox Code Playgroud)
有没有什么我可以对我的对象做什么,没有实际制作属性,这将为这两个"属性"添加数据绑定支持?
请注意,对于我的真实类,我知道每个属性的类型,因此如果它更容易,请将上面的代码更改为仅使用字符串值:
public class CustomDataBinding : Component
{
private Dictionary<String, String> _Properties = new Dictionary<String, String>();
public CustomDataBinding()
{
_Properties["Property1"] = "Property1";
_Properties["Property2"] = "Property2";
}
}
Run Code Online (Sandbox Code Playgroud)
我还需要验证支持,因为我们的类也可以报告每个属性的验证状态,但我已经实现了IDataErrorInfo和IDataValidationInfo,我认为它会给我这个.我也实现了INotifyPropertyChanged,所以我想到了改变机制,但我需要发现并与属性交谈.除了这些接口之外,我应该研究的任何其他内容都是受欢迎的信息.
最近发现LINQPad可以执行shell命令。有人可以向我展示如何使用 LINQPad 查询来执行批处理作业的示例吗?
对不起,我没有把我的问题说清楚。我的意思是让 .linq 文件成为我的批处理文件。即,调度一个用 .linq 文件编写的批处理作业,并使用 LINQPad 作为执行它的命令。
枚举时如何更改Dictionary的值?以下代码不起作用,因为枚举时我们无法更改字典的值.有没有办法绕过它?或者没有办法?谢谢
foreach (KeyValuePair<string, int> kvp in mydictionary)
{
if (otherdictionary.ContainsKey(kvp.Key))
{
mydictionary[kvp.Key] = otherdictionary[kvp.Key];
}
else
{
otherdictionary[kvp.Key] = mydictionary[kvp.Key];
}
}
Run Code Online (Sandbox Code Playgroud) 大家好我正在用F#做一个项目,但是当我使用let num = line代码时,我得到了这个错误.我是F#的新手,所以我无法解决问题.我的代码应该做这件事.用户输入一个数字并计算斐波纳契,但如果用户输入的数字不是抛出异常
open System
let rec fib n =
match n with
|0->0
|1->1
|2->1
|n->fib(n-1)+fib(n-2);;
let printFibonacci list =
for i=0 to (List.length list)-1 do
printf "%d " (list.Item(i));;
let control = true
while control do
try
printfn "Enter a Number:"
let num:int = Convert.ToInt32(stdin.ReadLine())
with
| :? System.FormatException->printfn "Number Format Exception";
let listFibonacci = [for i in 0 .. num-1->fib(i)]
printFibonacci(listFibonacci)
printfn "\n%A"(listFibonacci)
control<-false
Console.ReadKey(true)
exit 0;;
Run Code Online (Sandbox Code Playgroud) 是的,我是c#的新手!:)我正在使用.Net4 VS2010.
我有三个类,每个类用于构建该类型的对象列表.这三个都继承了基类.
我想将结果三个列表合并为一个,并在其中一个基类元素上对它们进行排序.
这可以用不同类型的列表完成吗?
简化示例:
每个列表都已创建
public List<TestOne> TestOne list;
public List<TestTwo> TestTwoList;
public List<object> BothLists;
Run Code Online (Sandbox Code Playgroud)
填写TestOne和TestTwo的代码......
什么/如何将TestOne和TestTwo结合到BothLists中并在SeqNumber上对它们进行排序?
public class BaseClassTest
{
public string Loc { get; set; } // loc
// sequence number to order by will be assigned in the resulting class
public int SeqNumber { get; set; }
}
public class TestOne : BaseClassTest
{
public int Number { get; set; }
}
public class TestTwo : BaseClassTest
{
public string CatName { get; set; } …Run Code Online (Sandbox Code Playgroud) 我试图创建的集列表[set([0]), set([1]), set([2]),..]使用
>>> [set(i) for i in range(9)]
Run Code Online (Sandbox Code Playgroud)
但它并不是很好
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
TypeError: 'int' object is not iterable
Run Code Online (Sandbox Code Playgroud)
如何使用列表推导创建该列表?可能吗?
我有一个错误的IF声明.我试图检查触摸是否在某个区域内.然而,它似乎正在为精灵创建一个隐形触摸盒,它是一个永无止境的触摸盒,它正好在屏幕外.左侧和顶部区域工作正常,但右侧的X轴是错误的.这是我的IF声明.
if (tl.State == TouchLocationState.Pressed
&& tl.Position.X >= harePlayer.Position.X
&& tl.Position.Y >= harePlayer.Position.Y
&& harePlayer.Position.X <= (harePlayer.Position.X + 52)
&& tl.Position.Y <= (harePlayer.Position.Y + 50))
Run Code Online (Sandbox Code Playgroud)