【问题标题】:"Access violation reading location" Thrown From Empty DLL Method“访问冲突读取位置”从空 DLL 方法抛出
【发布时间】:2021-12-01 08:24:40
【问题描述】:

我收到以下错误:

在 My Test App.exe 中的 0x71D1336E (vcruntime140.dll) 处引发异常: 0xC0000005:访问冲突读取位置0x00974000。

从 C# .NET Framework 控制台(这是一个 C++ DLL 非托管项目)调用以下方法时:

extern "C" {
    __declspec(dllexport) int SetIpAddress() {
        return 0x8;
    }
}

这是我的控制台代码:

class Program
{
    [DllImport("C:\\Users\\Dash\\Release\\Test.dll", CallingConvention = CallingConvention.Cdecl)]
    public static extern int SetIpAddress();

    static void Main(string[] args)
    {
        int result = SetIpAddress();
        Console.WriteLine($"SetIpAddress result: {result}");
    }
}

从与“访问冲突读取位置”相关的所有类似 SO 问题中,它与分配内存的问题有关。但是,正如您所看到的,在任何方法中都没有分配内存。想法?

【问题讨论】:

  • 名称不匹配 SetNcIpAddressSetIpAddress。错字?
  • @RichardCritten - 是的,SetIpAddress - 方法名称匹配,这只是一个错字。
  • DLL 是 32 位的,而您的 C# 是 64 位的?我相信我曾经遇到过这个。
  • 这也是拼写错误...Dash\\\\Release... 吗?
  • 两个项目都是 64 位版本。而且,是的,目录路径也是一个错字。

标签: c# c++


【解决方案1】:

问题是目标构建中的错误 - 一个是 DEBUG,另一个是 RELEASE。

@bschellekens 评论帮助我解决了这个问题。谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多