Невозможно найти точку входа в DLL - PullRequest
4 голосов
/ 22 февраля 2012

У меня есть приложение на C #, из которого я пытаюсь отправить параметр в функцию C ++. Однако я получаю сообщение об ошибке (упомянуто в теме)

C # приложение:

static class SegmentationFunctions
{
[DllImport("MyApplication.dll", EntryPoint = "fnmain", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
        public static extern int fnmain(string search);
    }
}

public partial class MainWindow:Window
{
public MainWindow()
{
InitializeComponent();

string search = "test string here";
int scommand = SegmentationFunctions.fnmain(search);
}

C ++ file.h

extern "C" QUERYSEGMENTATION_API int fnmain(char query[MAX_Q_LEN]);

Файл C ++ .cpp

extern "C" QUERYSEGMENTATION_API int fnmain(char searchc[MAX_LEN_Q])
{

do something...

}

Ответы [ 2 ]

5 голосов
/ 22 февраля 2012

Dependency Walker может показать вам, какие функции эффективно экспортируются из DLL. Вы сможете увидеть, есть ли вообще ваш fnmain, или вместо него _fnmain, или в названии есть украшение C ++.

0 голосов
/ 22 февраля 2012

Обратите внимание, что по умолчанию Visual Studio не будет копировать исходный вывод в ту же папку, что и управляемый вывод.

вручную скопируйте исходный вывод в папку управляемой сборки и повторите попытку - если это ваша проблема, вам нужно изменить настройки сборки C ++, чтобы расположить папку назначения так же, как папка управляемого приложения.

Ваш код верен - до тех пор, пока макрос QUERYSEGMENTATION_API определен правильно, а ваша dll фактически построена как "MyApplication.dll"

Я бы вручную запустил исполняемый файл из файловой системы - убедившись, что последние exe и dll находятся в одной и той же папке, и в случае сбоя запустите зависящий от него файл.exe.

...