在从PowerBuilder调用C#代码时,我似乎遇到了一个问题,但它只会影响某些计算机。
程序本身是一个简单的程序,允许您发送电子邮件。该应用程序是用PowerBuilder 11.2编写的,而SMTP部分是用C#/ C ++编写的,它是在Mail.dll文件中创建的。
当PowerBuilder应用程序运行时,它几乎可以在我工作的所有计算机上运行。在以下一行中有几个崩溃的地方
cmail mail = CREATE cmail
但正如我所说,它仅限于几台机器上。所有机器都是戴尔台式机,运行Windows 7 64位,带有2.0GB Ram。
DLL文件位于C:\ Program Files(x86)\ Sybase \ PowerBuilder 11.0 \,并且该路径已添加到PATH变量中。
我是否有任何提示可以继续尝试找出可能出错的地方?我的信念是,即使文件路径在系统路径中,某些机器也找不到DLL,并且计算机几乎完全相同。
谢谢。
编辑:这是它向我们投掷的错误:
申请已终止。
错误:即使是w_email的对象cb_send点击第11行的运行时函数引用错误
答案 0 :(得分:1)
在这里想一想。事实上,它在如此多的机器上运行而不是在两台或三台机器上工作,这使我倾向于这是一个配置/部署问题。当我遇到这样的情况时,我通常会拔出Dependency Walker并检查你的dll可能需要或不需要哪些文件丢失(或不丢失)。
我会在一台工作的机器上运行它,并在其中一台无法运行的机器上运行。这应该可以获得在这些计算机上更正此问题所需的信息。
如果这有助于你,请告诉我。我很想知道它是什么。
答案 1 :(得分:1)
结束找出问题所在。该问题与通过DEBUG模式构建.dll有关。
如果.dll处于DEBUG模式,它将使用.NET Framework的特殊版本,该版本仅可从VisualStudio 20xx获得。
只需将其更改为RELEASE build即可在所有计算机上运行。
答案 2 :(得分:0)
是否有可能将'null'对象从Powerbuilder传递到API?
我刚刚解决了这样的问题。对于某些参数,除了null之外,还必须更新C#代码以检查System.DBNull,否则会发生强制转换异常,如果未处理,最终会显示类似于您在PB应用程序中描述的消息。