小编bac*_*car的帖子

为什么这个C#COM类可以从VBScript而不是JScript中使用?

考虑下面给出的C#中与自动化兼容的COM库.它遵循一个常见的COM模式,即有一个可见的工厂coclass FooFactory实现ICreateFoos,它创建一个IFoo类型的对象.FooFactory是类型库中唯一的 coclass.(工厂模式对COM特别有用,因为它不允许参数化构造函数).

在下面的代码中,我发现我无法从jscript 访问返回的IFoo接口,除非我使FooImpl类ComVisible(通过取消注释注释行;这使它在类型库中显示为coclass).从VBscript访问它没有这样的问题.

也就是说,我可以运行这个VBScript:

set ff = CreateObject("jstest.FooFactory")
set foo = ff.CreateFoo(0)
foo.Foo
Run Code Online (Sandbox Code Playgroud)

但这个功能相同的 JScript失败,错误"C:\ temp\jstest\jstest.js(4,1)Microsoft JScript运行时错误:'foo'为null或不是对象":

var ff = new ActiveXObject("jstest.FooFactory");
var foo = ff.CreateFoo(0)
//WScript.Stdout.WriteLine(null==foo)
foo.Foo();
Run Code Online (Sandbox Code Playgroud)

如果我取消注释该行,我可以看到null == foo为false.

为什么会这样?这是一个错误吗?请注意,我认为这是一个问题,是JScript和C#/ .net特定实现(可能是IDispatch)的组合,因为我有其他类似的COM服务器 - 用C++实现 - 不会从JScript中出现这个问题.

如果我在下面的代码中取消注释注释行,使得FooImpl作为coclass可见,那么问题就会消失 - 但我特别不希望这样做,因为我不想暴露实现细节.一个解决方法似乎是使FooImpl ComVisible,但标记其构造函​​数内部,这可以防止客户端能够CoCreate它,但这并不优雅.

我正在使用Visual Studio 2005,.net 2在WinXP SP3上运行,并且能够在VirtualBox上完全全新安装TinyXP(都使用Windows Script Host 5.7)以及使用Windows 7 Ultimate进行重现.net SDKs 2.0,3.0,3.5和4.0(WSH 5.8).所有操作系统都是32位.

库代码:

using System;
using System.Runtime.InteropServices;

[assembly: ComVisible(false)]

namespace jstest
{
    [ComVisible(true)]
    public interface ICreateFoos
    {
        IFoo CreateFoo(int …
Run Code Online (Sandbox Code Playgroud)

javascript c# com vbscript ole

6
推荐指数
1
解决办法
1217
查看次数

我可以在Apache Commons Config中同时使用数组和非数组吗?

使用以下属性文件:

foo=hello, world!
bar=first,second
Run Code Online (Sandbox Code Playgroud)

我想将第一项检索为字符串,第二项检索为数组.我本以为getStringvs getStringArray会处理这个,但它不会 - getString("foo")只是在逗号之前获取所有内容,即"你好".

如果我禁用分隔符解析使用setDelimiterParsingDisabled,foo很好,但这也改变了getStringArray("bar")返回单元素数组的行为!

我无法找到如何明确告诉它我希望它如何解释单个配置项,无论是字符串还是数组.我不想将配置项放入具有不同分隔符规则的单独配置文件中,我更喜欢使用逗号作为getStringArray案例的分隔符.

详细说明,这个片段打印hello - 2hello, world! - 1- 我希望它打印hello, world! - 2!

AbstractFileConfiguration config = new PropertiesConfiguration();
config.setFileName("C:\\temp\\temp.properties");
//config.setDelimiterParsingDisabled(true);
config.load();
System.out.println(config.getString("foo") + " - " + config.getStringArray("bar").length);
Run Code Online (Sandbox Code Playgroud)

java configuration apache-commons-config

6
推荐指数
1
解决办法
3276
查看次数

是否有用于将谓词定义为类似SQL的字符串的Java库?

Lambdaj(以及其他一些类似的库)提供了一个having函数,它允许我像这样定义谓词(例如直接来自lambdaj Features页面):

List<Person> oldFriends = 
    filter(having(on(Person.class).getAge(), greaterThan(30)), meAndMyFriends);
Run Code Online (Sandbox Code Playgroud)

我非常希望能够使用简单的字符串语法定义我的Java谓词对象"age > 30"- 类似于SQL where子句 - 所以上面的过滤器变成了类似的东西:

List<Person> oldFriends = 
    filter(having(Person.class, "age > 30"), meAndMyFriends);
Run Code Online (Sandbox Code Playgroud)

这样的库是否存在,或者是否有人可以为我自己构建一个查询解析部分推荐一些构建块?我实际上并不介意它创造了什么样的谓词(hamcrest,guava等).

在我的头脑中,我可以想到它支持的许多事情:平等和不平等,自定义和原始类型,和/或/不,括号,LIKE(对于字符串),in(...)enum的解释名称,属性的属性.

这是一个更复杂的谓词的例子:

"salesCount > 10 and (country='UK' or city='New York')
and attitude not in (MENACING, RUDE)
and product.name <> 'Widget' "
Run Code Online (Sandbox Code Playgroud)

(此示例假定谓词应用于的SalesPerson类(比如一个类)具有方法getSalesCount(),getCountry()和getCity(),以及getAttitude()(返回枚举).它还具有属性getProduct,返回带有getName方法的类型.

动机:我们有一个客户端 - 服务器系统,它有多种语言API(目前是Java和C#); 我正在寻找一种语言无关的方式让用户指定一个谓词,该谓词过滤一组对象,其中的确切内容只有服务器进程知道(用Java编写).

java sql predicate el lambdaj

6
推荐指数
1
解决办法
2219
查看次数

为什么FileInputStream read()没有阻塞?

我有一个Writer程序,它将一行文本写入文件,然后等待用户在写入另一行之前返回,然后退出.只有在那之后文件才关闭.代码:

public class Writer {

    Writer() {
    }

    public static String[] strings = 
        {
            "Hello World", 
            "Goodbye World"
        };

    public static void main(String[] args) 
        throws java.io.IOException {

        java.io.FileOutputStream pw =
            new java.io.FileOutputStream("myfile.txt");

        for(String s : strings) {
            pw.write(s.getBytes());
            System.in.read();
        }

        pw.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

首先开始:

java作家

然后我还有一个读者程序,只要文件的写入尚未完成(即尚未调用pw.close()),应该(我预期)阻止.代码:

public class ReaderFIS extends Object {

    ReaderFIS() {
    }

    public static void main(String[] args) throws Exception {

        java.io.FileInputStream in = new java.io.FileInputStream("myfile.txt");

        int ch = -1;
        while((ch = in.read()) >= 0) {
         System.out.println("ch = …
Run Code Online (Sandbox Code Playgroud)

java file blocking fileinputstream

5
推荐指数
1
解决办法
2994
查看次数

VBScript中对象的破坏顺序是什么?

.vbs中的对象以什么顺序销毁?

也就是说,给定这些全局变量:

Set x = New Xxx
Set y = New Yyy
Run Code Online (Sandbox Code Playgroud)

我对以下任何一个问题的答案感兴趣.

  1. 对于.VBS中实现的类的实例,将以什么顺序Class_Terminate调用?粗略的戳戳建议创造的顺序(而不是逆序!),但这有保证吗?

    编辑:我知道Class_Terminate将在释放对象的最后一次引用时调用.我的意思是:x和y的发布顺序是什么,是否有保证?为简单起见,假设x和y是对其各自对象的唯一引用.

  2. 对象的类型是否重要?例如,如果我在.VBS中实现的类与其他COM对象混合在一起,例如Scripting.FileSystemObject.

    编辑:我知道COM库可能会设置自己的内部循环引用,脚本主机引擎一无所知; 我有兴趣探索可能影响第一个问题答案的内容.

  3. 上述不同的答案如果x和y是Sub或Function的本地而不是全局?
  4. 是否取决于退出是正常的,例外还是通过WScript.Quit?(在后一种情况下,似乎Class_Terminate在退出之前仍然会调用任何未完成的对象,但这些可能会导致报告错误).
  5. 什么时候WScript对象被破坏?
  6. 脚本是否重要?(wscript.exe vs cscript.exe与调用Web主机引擎无关)
  7. JScript的对象销毁模型与VBScript的不同吗?

我可以凭经验找到其中一些问题的答案,但我对它们中的任何一个是否得到保证 /记录感兴趣.

即使你只知道一些答案 - 或进一步的相关问题,请发帖.

windows vbscript destructor object-lifetime

5
推荐指数
1
解决办法
1440
查看次数

短(6位)加密密钥哈希

我必须实现一个简单的哈希算法.

输入数据:

  • 值(16位整数).
  • 钥匙(任何长度).

输出数据:

  • 6位散列(数字0-63).

要求:

  • 它应该是几乎不可能预测哈希值,如果你只需要输入值,但并不是关键.更具体一点:如果我知道x <M的hash(x),那么在不知道密钥的情况下很难预测散列(M).

可能的解决方案:

  1. 保持完整映射为关键.所以密钥长度为2 ^ 16*6位.这对我来说太长了.
  2. 线性代码.Key是生成矩阵.它的长度是16*6.但是使用几个已知的哈希值很容易找到生成矩阵.

还有其他可能性吗?

encryption hash cryptography

3
推荐指数
1
解决办法
871
查看次数

检查是否加载了aspectjweaver(或任何javaagent)

是否有(pref便携式)方法来检查JVM是否已经声明了特定的 -javaagent

特别是我有兴趣知道是否加载了aspectj加载时间织入器.(我正在尝试在启动不正确的情况下提供有用的错误消息).

java aspectj javaagents

2
推荐指数
1
解决办法
3074
查看次数

如何在VBScript中实现select语句?

谁能告诉我如何在VBScript中实现select语句,类似于C中的switch语句?如果您提供一些示例,那将是很好的,因为我对VBScript很新.谢谢.

vbscript

1
推荐指数
1
解决办法
5987
查看次数