在我的解决方案中,本机dll调用始终会导致一个项目崩溃,但不会导致另一个项目(windows 7 64位)崩溃



基本上我使用的是c#中的lua(一个用于脚本编写的本地dll)。我遵循了一个教程,使用正确的调用约定重新编译lua-dll并导入所需的函数。

每次我调用程序时,都会有一个特定的函数使程序崩溃。它从本机环境中获取一个字符串(我之前用不同的api调用将其放在那里),然后再次将其作为托管字符串返回。

我有3个独立的.net项目。第一个项目是一个共享项目,它将所有本地调用nice和neat打包到一个.net dll中。另外两个使用共享项目。一个是使用Windows.Forms的GUI应用程序,另一个是控制台应用程序。

控制台应用程序的一切都很好,但每次我从GUI项目中调用我提到的函数时,它都会立即崩溃,没有异常或错误。调试时,我尝试从观察窗格中调用该函数,结果显示:"函数评估已放弃",几秒钟后调试器退出。

我百分之百肯定,从GUI程序和控制台程序调用它的方式没有区别,即使其中一个可以工作,另一个不可以。我应该提到的是,我主要在windows7 64位上开发,但当我在我的笔记本电脑(windowsxp32位)上调试时,gui程序神秘地工作了。

我怀疑这个问题与编组(无可否认,我对编组知之甚少)或其他我不知道的细节有关。在将字符串推入本机环境之前,我确实将其整理为UnmanagedType.LPStr。

我不是在寻找一个全面的答案或任何东西(尽管如果你有,无论如何,让我们听听)。我只是想知道如何解决这样的问题。

检查Console和WinForms项目的平台目标项目设置。我可以肯定,其中一个有"x86",另一个则有"任意CPU"。

最新更新