C# PowerBuilder调用C代码在某些计算机上崩溃?
在从PowerBuilder调用C代码时,我似乎遇到了一个问题,但它只影响一些计算机 该程序本身是一个简单的程序,允许您发送电子邮件。应用程序是用PowerBuilder 11.2编写的,而SMTP部分是用C/C++编写的,它是在Mail.dll文件中创建的 当PowerBuilder应用程序运行时,它在我工作的几乎所有计算机上都能100%工作。在下面的几行中,它崩溃了C# PowerBuilder调用C代码在某些计算机上崩溃?,c#,c++,powerbuilder,C#,C++,Powerbuilder,在从PowerBuilder调用C代码时,我似乎遇到了一个问题,但它只影响一些计算机 该程序本身是一个简单的程序,允许您发送电子邮件。应用程序是用PowerBuilder 11.2编写的,而SMTP部分是用C/C++编写的,它是在Mail.dll文件中创建的 当PowerBuilder应用程序运行时,它在我工作的几乎所有计算机上都能100%工作。在下面的几行中,它崩溃了 cmail mail = CREATE cmail 但正如我所说,它只在少数机器上。所有机器都是Dell台式机,运行Wind
cmail mail = CREATE cmail
但正如我所说,它只在少数机器上。所有机器都是Dell台式机,运行Windows 7 64位和2.0GB Ram
DLL文件放在C:\Program Files x86\Sybase\PowerBuilder 11.0\中,相同的路径已添加到path变量中
有没有什么建议可以让我继续尝试找出可能的错误?我的信念是,即使文件路径在系统路径中,一些机器也找不到DLL,而且计算机实际上是相同的
多谢各位
编辑:下面是它向我们抛出的错误:
申请终止
错误:在w_email的对象cb_send的第11行,错误的运行时函数引用这里只是一个想法。它在这么多机器上工作,而不是在两三台机器上工作,这一事实使我倾向于这是一个配置/部署问题。当我遇到这样的情况时,我通常会拉出Dependency Walker并检查dll可能需要或不需要的文件是否丢失 我会在一台工作的机器和一台不工作的机器上运行它。这将获得在这些机器上更正此问题所需的信息
如果这对你有帮助,请告诉我。我很想知道它是什么。是否有可能将“null”对象从Powerbuilder传递到API中
我刚刚解决了这样一个问题。必须更新C代码,以检查System.DBNull以及某些参数的null,否则会发生强制转换异常,如果未处理,最终会显示一条消息,如您在PB应用程序中所述。最终发现了问题所在。该问题与通过调试模式构建.dll有关 如果.dll处于调试模式,则它将使用仅可从VisualStudio 20xx获得的特殊版本的.NET Framework
只需将其更改为RELEASE build,即可在所有计算机上运行。这是一个非常多的词,但除了它之外什么都没有说,它并不总是起作用。至少研究一下崩溃,至少得到一个合适的错误信息。我们已经研究了几天了,但仍然没有任何结果。我们最初的代码是通过OLEObject连接到DLL的,但我们在创建对象时不断遇到同样的问题。我会用调试器运行代码,但PowerBuilder调试器在尝试访问C代码时会挂起。我对PowerBuilder一无所知。。。您是否通过COM、windows dll或您提到的其他方式公开C/C++代码您的原始代码是OLE?不管怎样,您的问题似乎是对象创建,而不是以后调用方法。