Места Платформы.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);
вы можете использовать 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.
Не уверен в списке его параметров, но , следующий за плагином TotalCommander , очень полезен.
Если у вас нет исходного кода и документации API, машинный код - это все, что есть, вам необходимо дизассемблировать библиотеку dll, используя что-то вроде IDA Pro , другой вариант - использовать пробную версию PE Explorer .
PE Explorer предоставляет дизассемблер. Есть только один способ выяснить параметры: запустить дизассемблер и прочитать вывод дизассемблера. К сожалению, эту задачу обратного проектирования интерфейса нельзя автоматизировать.
PE Explorer поставляется в комплекте с описаниями для 39 различных библиотек, включая основные библиотеки операционной системы Windows® (например, KERNEL32, GDI32, USER32, SHELL32, WSOCK32), ключ графические библиотеки (DDRAW, OPENGL32) и др.
(источник: heaventools.com )