вызов dll .NET из win32 приложения
От: NotForAll  
Дата: 14.11.08 11:53
Оценка:
Всем большой привет.

Может ли Win32 приложение вызвать dll написанную на c++.NET?

Ломаю голову, впервые пришлось столкнуться с подобного рода задачей.
Заранее благодарю.
Чудеса бывают 2-х категорий — те, на которые мы можем дать объяснения, и те на которые не можем...(Личный опыт)
Re: вызов dll .NET из win32 приложения
От: Danchik Украина  
Дата: 14.11.08 13:02
Оценка:
Здравствуйте, NotForAll, Вы писали:

NFA>Всем большой привет.


NFA>Может ли Win32 приложение вызвать dll написанную на c++.NET?


NFA>Ломаю голову, впервые пришлось столкнуться с подобного рода задачей.

NFA>Заранее благодарю.

Может.
На чем пишете?
Re: вызов dll .NET из win32 приложения
От: valkuzn http://www.inquartos.ru
Дата: 14.11.08 14:28
Оценка: 9 (2)
Здравствуйте, NotForAll, Вы писали:

NFA>Всем большой привет.


NFA>Может ли Win32 приложение вызвать dll написанную на c++.NET?


NFA>Ломаю голову, впервые пришлось столкнуться с подобного рода задачей.

NFA>Заранее благодарю.

Может вызывать даже написанную на C#
http://www.inquartos.ru/products/iob/optimization_dllexport.php
Re: вызов dll .NET из win32 приложения
От: Аноним  
Дата: 14.11.08 14:57
Оценка:
Здравствуйте, NotForAll, Вы писали:

NFA>Всем большой привет.


NFA>Может ли Win32 приложение вызвать dll написанную на c++.NET?


NFA>Ломаю голову, впервые пришлось столкнуться с подобного рода задачей.

NFA>Заранее благодарю.
Если бы это было на VB.NET VS2008 то там у project есть свойство "Register for COM interop", в 2005 и 2003 есть аналогичные.
Re[2]: вызов dll .NET из win32 приложения
От: NotForAll  
Дата: 17.11.08 07:15
Оценка:
Здравствуйте, Danchik, Вы писали:
D>Может.
D>На чем пишете?

на c#
Чудеса бывают 2-х категорий — те, на которые мы можем дать объяснения, и те на которые не можем...(Личный опыт)
Re[2]: вызов dll .NET из win32 приложения
От: NotForAll  
Дата: 17.11.08 07:33
Оценка:
Здравствуйте, valkuzn, Вы писали:

V>Может вызывать даже написанную на C#

V>http://www.inquartos.ru/products/iob/optimization_dllexport.php

"Тестирую" Obfuscator.

В интерфейсе dll должен быть указатель на хендл (HANDLE *phSubagentTrapEvent),
т.е. к примеру что то вроде:

[System.Reflection.Obfuscation(Feature="DllExport")] 
  public static void FunctionForExport(HANDLE *phSubagentTrapEvent) 
  { 
      System.Windows.Forms.MessageBox.Show(message, 
           "Message from Class1.FunctionForExport"); 
  }


В MSDN просматриваю MarshalAs, но подходящего ничего найти не могу.
Возможно не в том направлении двигаюсь.
Что можете посоветовать?
Чудеса бывают 2-х категорий — те, на которые мы можем дать объяснения, и те на которые не можем...(Личный опыт)
Re[3]: вызов dll .NET из win32 приложения
От: Danchik Украина  
Дата: 17.11.08 11:47
Оценка:
Здравствуйте, NotForAll, Вы писали:

NFA>Здравствуйте, Danchik, Вы писали:

D>>Может.
D>>На чем пишете?

NFA>на c#


Я не про managed спрашиваю, а на чем написано win32 приложение.
Re[4]: вызов dll .NET из win32 приложения
От: NotForAll  
Дата: 17.11.08 11:58
Оценка:
Здравствуйте, Danchik, Вы писали:

D>Я не про managed спрашиваю, а на чем написано win32 приложение.


с++
Чудеса бывают 2-х категорий — те, на которые мы можем дать объяснения, и те на которые не можем...(Личный опыт)
Re: вызов dll .NET из win32 приложения
От: nildar http://netobf.com
Дата: 17.11.08 13:43
Оценка:
Здравствуйте, NotForAll, Вы писали:

NFA>Всем большой привет.


NFA>Может ли Win32 приложение вызвать dll написанную на c++.NET?


NFA>Ломаю голову, впервые пришлось столкнуться с подобного рода задачей.

NFA>Заранее благодарю.

Вызвать можно, например можно использовать продукт Inquartos Obfuscator
у него есть возможность делать статические функции .NET сборки экспортируемыми

Подробнее на netobf.com...

Например код на C#:

//
// Добавить в таблицу экспорта метод 'FunctionForExport'
//
public class Class1
{
    [System.Reflection.Obfuscation(Feature="DllExport")]
    public static void FunctionForExport(string message )
    {
        System.Windows.Forms.MessageBox.Show(message,
             "Message from Class1.FunctionForExport");
    }
        
    public void Function1(stirng message) { }

    protected void Function2(string license_key ) {}

    internal void Function3(int number) { }
}


Пример вызова функции Class1.FunctionForExport (.NET dll) из кода на с++:


#include "stdafx.h"
#include 


int _tmain(int argc, _TCHAR* argv[])
{
    HMODULE hDll2=LoadLibraryA(
        "D:\\_Temp\\VS2005\\TestProject\\OutputObfuscate\\ClassLibrary1.dll");
    VOID (WINAPI *FunctionForExport)(char*);
    (FARPROC &)FunctionForExport= GetProcAddress(hDll2, "FunctionForExport");
    FunctionForExport("Call from c++");

    return 0;
}



Подробнее

Пример проекта (C#, C++)
-------------------------
http://netobf.com/
http://forum.inquartos.ru/
Обфускация, защита .NET приложений.
А также полезные примеры на C#
Re: вызов dll .NET из win32 приложения
От: игппук Беларусь  
Дата: 17.11.08 13:54
Оценка:
CorBindToRuntimeEx спасет отца русской демократии.
проклятый антисутенерский закон
Re[3]: вызов dll .NET из win32 приложения
От: nildar http://netobf.com
Дата: 17.11.08 14:10
Оценка:
Здравствуйте, NotForAll, Вы писали:

NFA>Здравствуйте, valkuzn, Вы писали:


V>>Может вызывать даже написанную на C#

V>>http://www.inquartos.ru/products/iob/optimization_dllexport.php

NFA>"Тестирую" Obfuscator.


NFA>В интерфейсе dll должен быть указатель на хендл (HANDLE *phSubagentTrapEvent),

NFA>т.е. к примеру что то вроде:

NFA>
NFA>[System.Reflection.Obfuscation(Feature="DllExport")] 
NFA>  public static void FunctionForExport(HANDLE *phSubagentTrapEvent) 
NFA>  { 
NFA>      System.Windows.Forms.MessageBox.Show(message, 
NFA>           "Message from Class1.FunctionForExport"); 
NFA>  } 
NFA>


NFA>В MSDN просматриваю MarshalAs, но подходящего ничего найти не могу.

NFA>Возможно не в том направлении двигаюсь.
NFA>Что можете посоветовать?


Вот так должно заработать (вместо IntPtr можно использовать и Int32)

using System;
using System.Runtime.InteropServices;

namespace ClassLibrary1
{
    public class Class1
    {
        // для типа IntPtr (in,out)
        [System.Reflection.Obfuscation(Feature = "DllExport")] 
        public static void  FunctionForExport(ref IntPtr phSubagentTrapEvent)
        {
           
        }
    }
}
-------------------------
http://netobf.com/
http://forum.inquartos.ru/
Обфускация, защита .NET приложений.
А также полезные примеры на C#
Re[3]: вызов dll .NET из win32 приложения
От: nildar http://netobf.com
Дата: 17.11.08 14:13
Оценка:
NFA>Здравствуйте, valkuzn, Вы писали:
V>>Может вызывать даже написанную на C#
V>>http://www.inquartos.ru/products/iob/optimization_dllexport.php

NFA>"Тестирую" Obfuscator.


NFA>В интерфейсе dll должен быть указатель на хендл (HANDLE *phSubagentTrapEvent),

NFA>т.е. к примеру что то вроде:
NFA>
NFA>[System.Reflection.Obfuscation(Feature="DllExport")] 
NFA>  public static void FunctionForExport(HANDLE *phSubagentTrapEvent) 
NFA>  { 
NFA>      System.Windows.Forms.MessageBox.Show(message, 
NFA>           "Message from Class1.FunctionForExport"); 
NFA>  } 
NFA>

NFA>В MSDN просматриваю MarshalAs, но подходящего ничего найти не могу.
NFA>Возможно не в том направлении двигаюсь.
NFA>Что можете посоветовать?


Также подробнее можно узнать здесь, там есть примеры разного использования


Также примеры по теме (C#)


using System;
using System.Runtime.InteropServices;

namespace ClassLibrary2
{
    public class Class1
    {
        // для типа int (in,out)
        [System.Reflection.Obfuscation(Feature = "DllExport")] 
        public static void  funForInt(ref int val)
        {
            val += 10;
        }

        // для типа string (out)
        [System.Reflection.Obfuscation(Feature = "DllExport")]
        public static void funForOutString([Out, 
           MarshalAs(UnmanagedType.LPWStr)] out string str)
        {
            str = "Init from funForOutString";
        }
    }
}
-------------------------
http://netobf.com/
http://forum.inquartos.ru/
Обфускация, защита .NET приложений.
А также полезные примеры на C#
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.