Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как обеспечить Marshal a C++ классов в C#? 
:(
    Опции темы
FliN
Дата 2.5.2009, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 12.2.2007

Репутация: нет
Всего: нет



Столкнулся с необходимость написания оболочки для dll, написанной на MS VС++ 9.0
Поскольку есть только .dll, .lib и .h решил написать библиотеку-оболочку, однако при  вызове метода ругается страшными словами
на this->m_pNativeObject->setBaseDirectory(pchString); :
"Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена"

Program.cs
Код

CSWebCore mWebCore = new CSWebCore(CSLogLevel.LOG_NONE);
mWebCore.setBaseDirectory(@"C:\media");


CSWebCore.h
Код

        public ref class CSWebCore
    {
        WebCore* m_pNativeObject;
    public:        
        CSWebCore(CSLogLevel level);
                void setBaseDirectory(String^ baseDirectory)
        {
            IntPtr pString = Marshal::StringToHGlobalAnsi(baseDirectory);
            try
            {
                char* pchString = static_cast<char *>(pString.ToPointer());
                this->m_pNativeObject->setBaseDirectory(pchString); // ошибка в памяти
            }
            finally
            {
                Marshal::FreeHGlobal(pString);
                        }
                 }
        
         }


CSWebCore.cpp
Код

Awesomium::CSWebCore::CSWebCore( CSLogLevel level ) 
    : m_pNativeObject(NULL)
{
    this->m_pNativeObject = new WebCore((LogLevel)level);
}






Определение метода в исходной библиотеке
WebCore.h
Код

void setBaseDirectory(const std::string& baseDirectory);


 smile что можно сделать?
П.С. на С++ все работает как часы.
PM MAIL   Вверх
Partizan
Дата 2.5.2009, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



FliN, есть мнение, что в pchString получается не null-terminated string


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
FliN
Дата 2.5.2009, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 12.2.2007

Репутация: нет
Всего: нет



Цитата(Partizan @ 2.5.2009,  19:29)
FliN, есть мнение, что в pchString получается не null-terminated string

Код

this->m_pNativeObject->setBaseDirectory("C:\\media");

тоже не работает  smile 
PM MAIL   Вверх
Partizan
Дата 2.5.2009, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



FliN, а на Native-методе брейкпойнт никак не поставить?


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
FliN
Дата 2.5.2009, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 12.2.2007

Репутация: нет
Всего: нет



А куда нажать надо?
Или переходить на SMM надо?
PM MAIL   Вверх
Partizan
Дата 3.5.2009, 02:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



FliN, выложите сюда проект...разберёмся...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
FliN
Дата 3.5.2009, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 12.2.2007

Репутация: нет
Всего: нет



Ссылка на проект:
http://tohsaka.ru/download/HowToMarshal.zip


Для работы проекта следует определить переменную среды (через панель задач) $(Awesomium_HOME)

К примеру у меня:
user posted image


Это сообщение отредактировал(а) FliN - 3.5.2009, 08:49
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0457 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.