Win API 方法调用在 MS VS2008 内置的应用程序中工作,但在 VS2012 中不工作

Win API method call working in app built in MS VS2008, but not in VS2012

我有 Win7 64 位。在我的项目中,我使用来自 user32.dll 的 Win API 函数进行 DDE 通信。在 MS VS2008 中,一切正常,但现在我正在尝试将项目升级到 MS VS2012(在同一台 PC 和 OS 上)并且 API 函数调用导致程序崩溃。

具体就是这个函数:

[DllImport("user32.dll", EntryPoint = "DdeAccessData", CharSet = CharSet.Ansi)]
    internal static extern string DdeAccessDataString(IntPtr p, out int datasize);

它的电话是:

string result = Dde.DdeAccessDataString(da, out datasize);

我正在尝试调试它,但没有成功。我只能收到消息,“Windows 已在此行触发断点 ”。

你能建议任何让它起作用的方法吗?

您不能直接使用 DdeAccessData 的 return 值,因为编组器无法知道正在 returned 的数据的大小。

我没有对此进行测试,但您可以尝试使用 IntPtr 作为 return 值:

[DllImport("user32.dll", EntryPoint = "DdeAccessData")]
    internal static extern IntPtr DdeAccessData(IntPtr p, out int datasize);

然后使用Marshal.ReadByte检索数据。

IntPtr ptrByteArray = Dde.DdeAccessDataString(da, out datasize);
byte[] data = new byte[datasize];
for(int i =0; i < datasize; i++)
{
    data[i] = Marshal.ReadByte(ptrByteArray, i);
}
string result = System.Text.Encoding.ASCII.GetString(data);

您需要在完成后致电 DdeUnaccessData

Dde.DdeUnaccessData(da);