“Неспособный найти точку входа названной [функционируют] в dll” (C++ к c# преобразованию типов)

Я решил эту проблему следующим образом:

Добавить промежуточное программное обеспечение для обработки ответа, если оно является перенаправлением для запроса ajax, изменить ответ на нормальный ответ с URL-адресом перенаправления.

class AjaxRedirect(object):
  def process_response(self, request, response):
    if request.is_ajax():
      if type(response) == HttpResponseRedirect:
        r = HttpResponse(json.dumps({'redirect': response['Location']}))
        return r
    return response

Затем в ajaxComplete, если ответ содержит перенаправление, он должен быть перенаправлен, поэтому измените местоположение браузера.

$('body').ajaxComplete(function (e, xhr, settings) {
   if (xhr.status == 200) {
       var redirect = null;
       try {
           redirect = $.parseJSON(xhr.responseText).redirect;
           if (redirect) {
               window.location.href = redirect.replace(/\?.*$/, "?next=" + window.location.pathname);
           }
       } catch (e) {
           return;
       }
   }
}
21
задан Evgeny 17 March 2009 в 06:26
поделиться

5 ответов

Сначала удостоверьтесь, что функция на самом деле экспортируется:

В Командной строке Visual Studio, используйте dumpbin /exports whatever.dll

33
ответ дан 29 November 2019 в 06:18
поделиться

C# не поддерживает искажение имени C++, и любой необходимо объявить функции C++ с

extern "C" {...}

(не может опция, если они от третьего лица), или назовите скорректированное имя непосредственно, если можно заставить это работать. Может быть легче заставить третье лицо предоставлять неискаженный интерфейс функциональности.

23
ответ дан 29 November 2019 в 06:18
поделиться

Решенный - по крайней мере до такой степени, когда программа не повреждает и на самом деле возвращает меня значение bool.

ключ, я предполагаю, должен был определить точку входа как 'искаженное' имя

    [DllImport(@"cnOCRsdk.dll", EntryPoint="?recoCHN_P_Name@CcnOCRsdk@@QAE_NPADPAURECO_DATA@@@Z")]
    public static extern bool recoCHN_P_Name(ref string imgPath, ref RECO_DATA o_data);

После этого, я получил некоторые другие ошибки, но 'неспособный найти, что точка входа' ушла.

17
ответ дан 29 November 2019 в 06:18
поделиться

Вы могли попытаться использовать неискаженное имя при определении CallingConvention в DllImport

0
ответ дан 29 November 2019 в 06:18
поделиться

Я записал бы обертку с помощью C++ / CLI. Эта обертка будет в состоянии включать.h файлы и ссылку на .lib файлы, которые Вы получили от стороннего поставщика. Тогда это и легко и безопасно записать управляемый интерфейс для Вашей программы C#.

3
ответ дан 29 November 2019 в 06:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: