2015-10-28 44 views
-2

У меня очень интересная проблема. Звучит очень легко, но я не получил никакой информации об этом.loadlibrary не работает с кодом ошибки 127

У меня есть решение C# с дополнительным дополнением и winforms проектом приложения и библиотеки только с одним методом.

проект с библиотекой имеют следующий код:

[DllImport("Kernel32.dll", SetLastError = true, CharSet = CharSet.Ansi)] 
public static extern IntPtr LoadLibrary(string filename); 
public sealed class LibraryInfo 
{ 
    public readonly IntPtr Handle; 
    public LibraryInfo(string dllName) 
    { 
     Handle = LoadLibrary(dllName); 
    } 
} 
public LibraryInfo GetLib(string name) 
{ 
    return new LibraryInfo(name); 
} 

Посмотрите как просто. Итак, я вызываю этот метод из надстроек и из WinForms

У меня есть Dll, построенный для платформы x64 и платформы x86.

И теперь магия: LoadLibrary возвращает код ошибки только, когда я запускаю его из Надстройка и конфигурации x64 и первенствовать-2016 (x64, конечно). Когда я запускаю его на x86 или winform (как x86, так и x64), он работает. И это еще не все, когда я запускаю его на Excel 2013, он тоже работает отлично!

может кто-нибудь знает?

+0

Можно ли форматировать код в виде кода. В окне редактирования есть помощь в том, как это сделать. Таким образом, вы можете получить достойную подсветку синтаксиса и отступы. Как бы то ни было, код здесь трудно читать. –

ответ

0

Код ошибки 127 is ERROR_PROC_NOT_FOUND.

Указанная процедура не найдена.

Обычно это означает, что что-то вызывает GetProcAddress, который не работает, поскольку данный модуль не экспортирует функцию указанного имени.

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

Возможно, код, который вы не показывали, вызывает GetProcAddress и не работает. Или может быть, что загрузчик дает этот код ошибки при разрешении зависимостей загружаемой вами библиотеки.

Итак, то, что я сказал выше, является широким объяснением поведения, которое вы сообщаете. Все, что более конкретно, потребует использования фактического кода, но только у вас есть этот код.

+0

Спасибо 4 ответа. Но я не звонил getprocadrr =) – qpIlIpp

+0

Очевидно, что-то, возможно, загрузчик. Я не уверен, что вы действительно это понимаете очень подробно. –

-1

Проблема решена.

У меня есть зависимая dll для моего, называемая «Chart», поэтому у excel 2016 есть «chart.dll», 2013 - нет. Решение переименовывает мой «chart.dll» и восстанавливает обе библиотеки.

+0

Это относится ко многим деталям, которые просто отсутствуют в вопросе. Таким образом, если вы считаете, что это ответ на ваш вопрос, вам нужно сделать одну из двух вещей. Измените вопрос, чтобы предоставить все необходимые данные, чтобы этот ответ мог быть выведен нами, а не только вами. Или, если вы не хотите этого делать, удалите вопрос. В его нынешнем виде это, вероятно, мало пользы для вас. –

Смежные вопросы