C# 基于C的DLL包装基于C的DLL使用问题
我有用ANSI C编写的代码,我想在C#中使用。我已将C代码编译成DLL,并创建了C#包装器类以与C代码进行互操作。包装器的目的是简化用户与底层C代码的交互C# 基于C的DLL包装基于C的DLL使用问题,c#,c,dll,interop,wrapper,C#,C,Dll,Interop,Wrapper,我有用ANSI C编写的代码,我想在C#中使用。我已将C代码编译成DLL,并创建了C#包装器类以与C代码进行互操作。包装器的目的是简化用户与底层C代码的交互 [DllImport(DLL, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] private static extern void PrintHelloWorld(); public void PrintHelloWorldC() { P
[DllImport(DLL, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
private static extern void PrintHelloWorld();
public void PrintHelloWorldC()
{
PrintHelloWorld();
}
以上是我迄今为止所做工作的一个简化示例。现在,我正试图从我编写的C#包装器类创建一个DLL。从这里我可以给出创建的DLL,并且有人可以与基于C的DLL交互,从而与底层基于C的DLL交互。下面是我所做的和我遇到的问题
PrintHelloWorldC()
,并且成功PrintHelloWorldC()
中,它尝试调用PrintHelloWorld()代码>
System.BadImageFormatException
HResult=0x8007000B
Message=An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)
我的研究表明,很可能是DLL和测试项目之间的平台目标不匹配,但是,我仔细检查了所有配置,它们都应该为x86编译
下面是我所做的额外测试
任何帮助或指导都将不胜感激。提前谢谢 您是否试图在Visual Studio中以单元测试的形式运行此代码?我认为错误是由于对齐问题造成的。你在用CPU吗?AnyCPU默认为32位,并给出64位错误。请参阅以下内容:它将是32/64位mismatch@BlueStrat目前我没有运行单元测试。@jdweng我没有使用AnyCPU,但现在可以将其默认为32位。是否尝试在Visual Studio中作为单元测试运行此代码?我认为错误是由于对齐问题造成的。你在用CPU吗?AnyCPU默认为32位,并给出64位错误。请参阅以下内容:它将是32/64位mismatch@BlueStrat目前我没有运行单元测试。@jdweng我没有使用任何CPU,但现在可以默认为32位。