首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BadImageFormatException

BadImageFormatException
EN

Stack Overflow用户
提问于 2011-04-21 05:59:04
回答 2查看 3.9K关注 0票数 3

我在C#中调用C++ Dlls时遇到了一个问题

C++函数:

代码语言:javascript
复制
    int _declspec(dllexport) CompressPacket(unsigned char *buff, int offset, int len);

C#函数:

代码语言:javascript
复制
    [DllImport("HuffCompress.dll")]
            private static extern unsafe int HuffCompress(ref byte[] buff, int offset, int len);

    ...

    private unsafe byte[] CompressPacket(byte[] packet)
    {
        int len = HuffCompress(ref packet, 12, packet.Length-12);
        byte[] compressed = new byte[len];
        for (int i = 0; i < len; i++)
            compressed[i] = packet[i];
        return compressed;
    }

什么时候

int len = HuffCompress(ref packet, 12, packet.Length-12);

运行时,我会得到一个BadImageFormatException

因为C#编辑器是VSC# Express,它不编译64位程序,所以我不确定这个问题,任何想法都是很好的

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-21 07:11:27

Express版中缺少的平台目标设置几乎肯定是您的问题所在。您必须手动编辑项目的.csproj文件。运行notepad.exe并打开.csproj文件。找到如下所示的属性组:

代码语言:javascript
复制
 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

然后添加这一行:

代码语言:javascript
复制
    <PlatformTarget>x86</PlatformTarget>

对其下方的Release configuration组重复上述步骤。

你的下一个问题是函数的名称,如果你在C++中编译它,它就会被修饰。像这样声明它:

代码语言:javascript
复制
 extern "C" __declspec(dllexport) 
 int  __stdcall HuffCompress(unsigned char *buff, int offset, int len);

并且您的C#声明是错误的,请在第一个参数上删除ref关键字。

票数 11
EN

Stack Overflow用户

发布于 2011-04-21 06:06:24

DLL已损坏或它是错误的bitness。32位和64位模块不能混合使用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5737134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档