0

基本上我使用的是来自 c# 的 lua(用于脚本的本机 dll)。我按照教程使用正确的调用约定重新编译 lua dll 并导入所需的函数。

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

我有 3 个单独的 .net 项目。第一个项目是一个共享项目,它将所有本地调用都漂亮整洁地包装到一个 .net dll 中。另外两个使用共享项目。一个是使用 Windows.Forms 的 GUI 应用程序,另一个是控制台应用程序。

控制台应用程序一切正常,但每次我从 GUI 项目中调用我提到的那个函数时,它都会立即崩溃,没有异常或错误。我在调试时尝试从监视窗格调用该函数,它说:“函数评估已被放弃”,几秒钟后调试器退出。

我 100% 肯定,我从 GUI 程序和控制台程序调用它的方式没有区别,即使一个有效而另一个无效。我应该提到我主要在 Windows 7 64 位上进行开发,但是当我在 Windows xp 32 位的笔记本电脑上进行调试时,gui 程序神秘地工作了。

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

我不是在寻找一个全面的答案或任何东西(尽管如果你有一个,无论如何,让我们听听吧)。我只是在寻找有关如何解决此类问题的一些方向。

4

1 回答 1

2

检查 Console 和 WinForms 项目的平台目标项目设置。我敢肯定,其中一个具有“x86”,一个具有“任何 CPU”。

于 2012-12-05T21:36:56.703 回答