2013-07-22 4 views
-2

Привет, ребята, я читал много статей об этом вопросе, но ничего, что я пробовал, работал.Как вставить неуправляемую dll в консольное приложение

Код:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Runtime.InteropServices; 
using System.Reflection; 
using xNet.Net; 
using xNet.Collections; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     [DllImport("user32.dll")] 
     internal static extern bool OpenClipboard(IntPtr hWndNewOwner); 

     [DllImport("user32.dll")] 
     internal static extern bool CloseClipboard(); 

     [DllImport("user32.dll")] 
     internal static extern bool SetClipboardData(uint uFormat, IntPtr data); 


     [STAThread] 
     static void Main(string[] args) 
     { 

      go(); 
     } 

     public static void go() 
     { 
      CookieDictionary cookies = new CookieDictionary(); 
      Console.WriteLine(@"[~] Trying to upload text to http://pastebin.ru/"); 
      try 
      { 
       using (var request = new HttpRequest()) 
       { 
        request.UserAgent = HttpHelper.ChromeUserAgent(); 
        request.EnableEncodingContent = true; 
        request.Cookies = cookies; 
        request.AllowAutoRedirect = false; 

        var postData = new RequestParams(); 
        postData["parent_pid"] = ""; 
        postData["std-x"] = "1440"; 
        postData["std-y"] = "900"; 
        postData["poster"] = ""; 
        postData["code_name"] = ""; 
        postData["code"] = @"text"; 
        postData["mode"] = "178"; 
        postData["private"] = "1"; 
        postData["expired"] = "1"; 
        postData["paste"] = "Отправить"; 

        var response = request.Post("http://pastebin.ru/", postData); 
        var url = response.Location; 
        if (string.IsNullOrEmpty(url)) 
        { 
         Console.WriteLine(@"[!] Failed to upload text to http://pastebin.ru/\r\n"); 
         Console.ReadKey(); 
        } 
        else 
        { 
         url = @"http://pastebin.ru" + url; 
         Console.WriteLine(@"[+] Successfully uploaded to " + url); 
         OpenClipboard(IntPtr.Zero); 
         var ptr = Marshal.StringToHGlobalUni(url); 
         SetClipboardData(13, ptr); 
         CloseClipboard(); 
         Marshal.FreeHGlobal(ptr); 
        } 
       } 
      } 
      catch (NetException ex) 
      { 
       Console.WriteLine("Net error: " + ex.Message.ToString()); 
      } 
     } 

    } 
} 

Я пытался добавить ссылку на библиотеку DLL, добавить его к проекту, изменил Строить действия на внедренный ресурс, но ничего не получалось. Любая помощь?

+0

Что вы имеете в виду Встраивание DLL неуправляемый? Эссенциально встраивание 'user32.dll'? Включив его в файл exe? –

+0

Нет user2608247

+0

Вы хотите встроить xNet.dll в качестве двоичного ресурса в свой исполняемый файл? Или вы пытаетесь вызвать функции, которые находятся в xNet.dll? Ваш вопрос очень запутан. –

ответ

0

Назовем сборку вашего проекта MyAssembly.

Создайте новую папку в корне вашего проекта в Visual Studio. Назовем это MyDlls.

Поместите сборку вы хотите включить в эту папку и установить их Сложение Действие на Embedded Resource.

Затем в коде, добавьте следующие элементы:

class Program 
{ 
    // ... Your code 

    [STAThread] 
    static void Main(string[] args) 
    { 
     AppDomain.CurrentDomain.AssemblyResolve += AssemblyResolve; // Called when the assembly hasn't been successfully resolved 

     // ... Your code 
    } 

    private Assembly AssemblyResolve(object sender, ResolveEventArgs args) 
    { 
     Assembly assembly = Assembly.GetExecutingAssembly(); 

     string assemblyName = args.Name.Split(',')[0]; // Gets the assembly name to resolve. 

     using (Stream stream = assembly.GetManifestResourceStream("MyAssembly.MyDlls." + assemblyName + ".dll")) // Gets the assembly in the embedded resources 
     { 
      if (stream == null) 
       return null; 

      byte[] rawAssembly = new byte[stream.Length]; 
      stream.Read(rawAssembly, 0, (int)stream.Length); 
      return Assembly.Load(rawAssembly); 
     } 
    } 
}