none
VS 2013 C# call VC++ dll problem RRS feed

  • 問題

  • // myFuncton.h

    extern "C" __declspec(dllexport) int Add(int a, int b);

    // myFunction.cpp

    #include "stdafx.h"
    #include "myFunction.h"

    extern "C" __declspec(dllexport) int Add(int a, int b)
    {

     return a + b;
    }

    // Form1.cs

    using System;
    using System.Runtime.InteropServices;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace TestDll

    {
        public partial class Form1 : Form
        {
            [DllImport("myFunction.dll")]
            public static extern int Add(int a, int b);

            public Form1()
            {
                InitializeComponent();
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                int x = Add(10, 10);
            }
        }
    }

    ERROR CODE

    類型 'System.BadImageFormatException' 的未處理例外狀況發生於 TestDll.exe

    其他資訊: 試圖載入格式錯誤的程式。 (發生例外狀況於 HRESULT: 0x8007000B)

    2014年2月12日 上午 07:21

所有回覆

  • 在 x86 載入 x64 的模組就會有這種錯誤。

    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2014年2月12日 上午 07:28
    版主
  • 請問如何解決 ?

    我是在同一台  Windows 8 OS 的 PC 使用VS2013上開發

    2014年2月12日 上午 07:35
  • Bad Image Format通常都是程式是32位元或64位元格式的問題, 如果您的C#程式為32位元的程式, 您的C++ DLL也需要是32位元的程式

    2014年2月12日 下午 01:01
  • 了解, 感謝您的回覆.

    但是要在哪裡設定或修改呢 ?

    C#我有試著去改目標平台 從 AnyPc, x68, x64 但是都無法成功

    VC++ 的 Dll 是使用 Visual Studio 2013 所開發的

    C#的專案也是用 Visual Studio 2013 所開發的

    但是卻不能 import VC++ 的 dll

    但是我改用 Visual Studio 2012 去新增一個一樣的C#專案, 就可以 import Visual Studio 2013 所開發的 Dll,

    很怪 ? 在 Visual Stuio 2013 的專案並沒有 Win32 的選項.


    • 已編輯 OscarLu001 2014年2月13日 上午 02:20
    2014年2月13日 上午 02:03
  • 先確認 DLL 的格式吧。

    函數型 DLL / COM DLL / .Net Managed DLL 用法不同。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2014年2月13日 下午 01:27
  • 看不懂的就不需要費心回答了

    問題確實是32位元與64位元

    已經在MSDN上找到方式解決問題

    2014年2月14日 上午 03:07
  • 看不懂論壇簽名檔功能的人,是不該發問呢,還是不該接話?

    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2014年2月14日 下午 02:01