System.EntryPointNotFoundException вызывает DLL Visual C++ из VB.NETC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 System.EntryPointNotFoundException вызывает DLL Visual C++ из VB.NET

Сообщение Anonymous »

РЕДАКТИРОВАТЬ 5
Я удалил предыдущее сообщение, так как код был полностью изменен (надеюсь, что это не нарушает правил).
Я удалил все предыдущие ссылки на проблемные строковые переменные.
Теперь вопрос:
В учебных целях я сделал моя первая очень простая DLL Visual C++, и я хочу использовать ее в VB.Net.
В дополнение к автоматически сгенерированным файлам из Visual C++ (dllmain.cpc, pch.h, pch.cpp, к которым я добавил свой code.h) я добавил два файла для определения моей функции:
code.h

Код: Выделить всё

#pragma once
#include "pch.h"

#ifndef ADD_CODE_H
#define ADD_CODE_H
//extern "C"
//{
__declspec(dllexport) int add_code(int lng);
//}
#endif
code.cpp

Код: Выделить всё

#include 
#include "pch.h"
#include "code.h"

int add_code(int lng) {

switch (lng) {
case 4:
return 1;
case 5:
return 2;
default:
return 9;
}

return 0;

}
Ошибок при компиляции кода Visual C++ нет. Пробовал как x86, так и x64.
Если я раскомментирую «Extern C» от ​​Microsoft Dumper, я получу:

Код: Выделить всё

1    0 00001000 ?add_code@@YAHH@Z = ?add_code@@YAHH@Z (int __cdecl add_code(int))
Если я прокомментирую это, я получу:

Код: Выделить всё

1    0 00001000 add_code = _add_code
Из VB.NET я пытаюсь вызвать DLL с помощью этого кода:
vb.net

Код: Выделить всё

 'also "?add_code@@YAHH@Z"
'Also "CallingConvention: = CallingConvention.Cdecl
Public Shared Function add_code(ByVal lng As Integer) As Integer
End Function
А также:

Код: Выделить всё

 ' Also "CallingConvention: = CallingConvention.Cdecl
Public Shared Function add_code(ByVal lng As Integer) As Integer  'Also "_add_code"
End Function
Основная часть VB:

Код: Выделить всё

Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load

Dim foo As Integer = add_code(4) 'Also "_add_code"

End Sub
Пробовал как x86 (dll x86), x64 (dll x64), так и любой процессор (dll x86 или x64).
Я всегда получаю сообщение об ошибке:

System.EntryPointNotFoundException: не удалось найти точку входа с именем «add_code» в MyDll.dll


Подробнее здесь: https://stackoverflow.com/questions/797 ... rom-vb-net
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»