c # dllimport была предпринята попытка загрузить программу с неверным форматом - PullRequest
0 голосов
/ 25 сентября 2019

Я хочу импортировать внешнюю C ++ DLL в мой код C #.Но мой следующий код не работает ...

Я строю свой C # с "Любой ЦП", и моя C ++ DLL состоит из 32 бит.

Здесь моя функция C ++ DLL:

extern "C" DWORD __stdcall ScanForIed(LPSTR lpstrHtmlIedTag, LPSTR lpStartIpAddress, DWORD iNbAddressesToScan, LPSTR lpSelectedAddress)
{// exported function (entry point)
#ifdef _DEBUG
    _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
#endif
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    USES_CONVERSION;
    DWORD uiReturnVal = -1;
    CString strBuf;
    TCHAR tcBuf[256] = { 0 };

    MBS2WSTR(lpStartIpAddress, tcBuf);

       ........

    return uiReturnVal;
}

И моя функция C #, где я вызываю свою DLL:

[System.Runtime.InteropServices.DllImport("C:\\Users\\212721485\\Documents\\CBWatch\\Archive_CBW3\\CBW3SyncFiles\\CBW3SyncFiles\\IEDfinder.dll")]
        public static extern int ScanForIed(StringBuilder lpstrHtmlIedTag, StringBuilder lpStartIpAddress, uint iNbAddressesToScan, StringBuilder lpSelectedAddress);

        private void buttonSearchIp_Click(object sender, EventArgs e) {
            StringBuilder test1 = new StringBuilder("CBWatch3");
            StringBuilder test2 = new StringBuilder("10.5.47.1");
            StringBuilder test3 = new StringBuilder("10.5.47.153");



            ScanForIed(test1,test2,100,test3);
        }

Я пытаюсь использовать «StringBuilder» или «string» для аргумента LPSTR и «uint» для аргумента DWORD.И я пытался собрать свою C # программу в 32 бита, но у меня та же ошибка

Когда я запускаю свою программу, у меня появляется эта ошибка:

"Была сделана попытка загрузитьпрограмма с неверным форматом. (Исключение из HRESULT: 0x8007000B) "

Есть ли у вас какие-либо идеи о проблеме?Спасибо за любую помощь!

...