日志篇 cpp和c#调用c/cpp的dll例子及出现 System.BadImageFormatException 试图加载格式不正确的程序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了日志篇 cpp和c#调用c/cpp的dll例子及出现 System.BadImageFormatException 试图加载格式不正确的程序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1158字,纯文字阅读大概需要2分钟。
内容图文
今天遇到了一个加载dll出问题的情况,因为这个dll是cpp写的,而且是x86的,然后我一直用的x64来调用...
出现: System.BadImageFormatException:“试图加载格式不正确的程序。(异常来自HRESULT:Ox8007000B)”
让e大用cpp调用,结果没有出错.
int main(int argc, char* argu[])
{
typedef int(_stdcall* lpAddFun) (double*, doub1e*); //宏定义函数指针类型
HINSTANCE hD11; //DLL句柄
lpAddFun addFun; //函数指针
hD11 = LoadLibrary("TestAdd.dll");
int resu1t = 0;//将函数返回的值赋给它,这里先初始化
if (hD11 != NULL)
{
addFun = (lpAddFun)GetProcAddress(hD11, "test");/*用 addFun取代d11库中的add函数*/
if (addFun != NULL)
{
double a1[] = { 10,30 };
double a2[] = { 0 };
result = addFun(a1, a2);//这里是将整型2和整型3作为参数传进去
printf("输出结果为%0.4lf\n", a2[0]);
}
FreeLibrary(hD11);
}
systen("pause");
return 0;
}
然后他发现是x86的问题
class Program
{
[DllImport("TestAdd.dll", EntryPoint = "test")]
public static extern int Add(double[] n, double[] a);
static void Main(string[] args)
{
double[] a = new double[2] { 10, 20 };
double[] b = new double[1];
Add(a, b);//否则这句就会报错
Console.WriteLine(b[0].ToString());
Console.ReadLine();
}
}
一点要设置一下这里:
否则还会导致 Win32Api的LoadLibrary()返回空指针.
(完)
内容总结
以上是互联网集市为您收集整理的日志篇 cpp和c#调用c/cpp的dll例子及出现 System.BadImageFormatException 试图加载格式不正确的程序全部内容,希望文章能够帮你解决日志篇 cpp和c#调用c/cpp的dll例子及出现 System.BadImageFormatException 试图加载格式不正确的程序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。