首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从C#程序集中调用PowerBuilder.NET程序集始终返回Null或空字符串

从C#程序集中调用PowerBuilder.NET程序集始终返回Null或空字符串
EN

Stack Overflow用户
提问于 2013-07-13 05:17:20
回答 2查看 1.2K关注 0票数 1

我有一个调用PowerBuilder.NET(12.1 Build 7217)程序集的C#程序集。PowerBuilder源代码包含在下面,您可以看到它是一个相当简单的字符串真假评估。

当C#中的窗口调用PB.NET程序集时,它返回"true“的预期结果。当C#程序集调用相同的代码时,代码返回"“或空字符串。

我已经设法将问题缩小到PB.NET程序集中的DataStore交互。如果从另一个程序集中调用PB.NET程序集,则DataStore始终为0行,并且只包含空字符串。以前有没有人见过或处理过这种情况?

代码语言:javascript
复制
// Create instance of Datastore
ldsExpression = CREATE DataStore

// Set data object
ldsExpression.DataObject = "d_condition_expression"

//// Setting datawindow expression
lsExpression = 'condition_expression.expression = ~"' + asConditionExpression + '~"'

//// Apply Expression
lsError = ldsExpression.Modify(lsExpression)

IF len(lsError) = 0 THEN
    ldsExpression.InsertRow(0)

    //get the result
    lsResult = ldsExpression.GetItemString(1,"condition_expression") 
ELSE
    lsResult = lsError
END IF

// Destroy instance of ldsExpression
DESTROY(ldsExpression)

RETURN lsResult
EN

回答 2

Stack Overflow用户

发布于 2013-07-19 01:39:14

我看到您正在动态分配一个数据对象,我想知道它是否包含在最终程序集中--这只是一个猜测。这类似于在标准PB程序中编译为PBD但不在PBR文件中添加动态分配的数据对象时出现的问题。

我要看的另一件事是.NET程序集目标属性中的“使用.Net可空类型”设置--这是另一种猜测。

http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.help.pb.12.5/title.htm

我认为这与数据对象没有内置到程序集中有关,正如您所描述的那样,它从来没有任何行。

票数 0
EN

Stack Overflow用户

发布于 2013-07-24 03:51:54

我真的找到了解决这个问题的办法。它看起来确实像是一个PowerBuilder.NET错误,应该在未来的版本中解决。当由窗口或服务调用时,调用PowerBuilder.NET程序集正常工作,但如果由常规DLL程序集调用,则不起作用。

我发现了规则中的一个例外。如果PowerBuilder.NET程序集首先由同一应用程序中的窗口或服务调用,则C#程序集可以调用该程序集。我认为这是因为对象在第一次调用后仍然留在内存中,并从那里被重用。

幸运的是,我的应用程序由一个服务组成,该服务启动C#程序集中包含的几个线程。我将此调用添加到我的服务的Main方法中,随后对EvaluateExpression的所有调用都可以正常工作,无论它们是从哪里调用的。

这是有关该问题的Sybase/SAP线程的链接。http://scn.sap.com/thread/3391198

代码语言:javascript
复制
    private static string Evaluate(string expression)
    {
        var blah = new PowerBuilderAssembly();

        return blah.EvaluateExpression(expression);
    }

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    static void Main(string[] args)
    {

        var result = Evaluate("1 = 1");
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17624140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档