Есть ли какое-либо собственное средство просмотра функций экспорта DLL? [закрытый]

Места Платформы.NET DataFormats.CommaSeparatedValue на буфере обмена как текст Unicode. Но, как упомянуто в http://www.syncfusion.com/faq/windowsforms/faq_c98c.aspx#q899q , Excel ожидает, что данные CSV будут потоком памяти UTF-8 (трудно сказать или.NET, или Excel виновным в несовместимости).

решение, которое я предложил в своем собственном приложении, состоит в том, чтобы поместить две версии табличных данных на буфере обмена одновременно как разделенный текст вкладки и как поток памяти CSV. Это позволяет целевому приложению получать данные в своем предпочтительном формате. Блокнот и Excel предпочитают разделенный текст вкладки, но можно вынудить Excel захватить данные CSV через Вставку, Особенную... управляют для тестирования.

Вот некоторый пример кода (обратите внимание, что WinForms-эквиваленты от пространств имен WPF используются здесь):

// Generate both tab-delimited and CSV strings.
string tabbedText = //...
string csvText = //...

// Create the container object that will hold both versions of the data.
var dataObject = new System.Windows.DataObject();

// Add tab-delimited text to the container object as is.
dataObject.SetText(tabbedText);

// Convert the CSV text to a UTF-8 byte stream before adding it to the container object.
var bytes = System.Text.Encoding.UTF8.GetBytes(csvText);
var stream = new System.IO.MemoryStream(bytes);
dataObject.SetData(System.Windows.DataFormats.CommaSeparatedValue, stream);

// Copy the container object to the clipboard.
System.Windows.Clipboard.SetDataObject(dataObject, true);

87
задан Cristian Ciupitu 15 September 2014 в 20:31
поделиться

3 ответа

вы можете использовать Dependency Walker , чтобы просмотреть имя функции. вы можете увидеть параметры функции, только если она оформлена. прочтите следующее из FAQ:

Как просмотреть параметры и типы возвращаемых значений функции? Для большинства функций эта информация просто отсутствует в модуле. Формат файла модуля Windows предоставляет только одну текстовую строку для идентификации каждой функции. Не существует структурированного способа перечисления количества параметров, типов параметров или возвращаемого типа. Однако некоторые языки делают что-то, называемое функцией «украшение» или «искажение», то есть процесс кодирования информации в текстовую строку. Например, такая функция, как int Foo (int, int), закодированная с простым декором, может быть экспортирована как _Foo @ 8. Число 8 указывает на количество байтов, используемых параметрами. Если используется оформление C ++, функция будет экспортирована как ? Foo @ @ YGHHH @ Z, который может быть напрямую декодирован обратно в исходный прототип функции: int Foo (int, int). Dependency Walker поддерживает уменьшение декорирования C ++ с помощью команды Undecorate C ++ Functions.

68
ответ дан 24 November 2019 в 07:46
поделиться

Не уверен в списке его параметров, но , следующий за плагином TotalCommander , очень полезен.

2
ответ дан 6 October 2019 в 17:00
поделиться

Если у вас нет исходного кода и документации API, машинный код - это все, что есть, вам необходимо дизассемблировать библиотеку dll, используя что-то вроде IDA Pro , другой вариант - использовать пробную версию PE Explorer .

PE Explorer предоставляет дизассемблер. Есть только один способ выяснить параметры: запустить дизассемблер и прочитать вывод дизассемблера. К сожалению, эту задачу обратного проектирования интерфейса нельзя автоматизировать.

PE Explorer поставляется в комплекте с описаниями для 39 различных библиотек, включая основные библиотеки операционной системы Windows® (например, KERNEL32, GDI32, USER32, SHELL32, WSOCK32), ключ графические библиотеки (DDRAW, OPENGL32) и др.

alt text
(источник: heaventools.com )

8
ответ дан 24 November 2019 в 07:46
поделиться
Другие вопросы по тегам:

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