Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа с DLL 
:(
    Опции темы
Brain
Дата 10.12.2006, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 10.12.2006
Где: Россия, Новочерка сск

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



Доброго времени суток.
Учусь писать и использовать dll.
Я написал прогу на С# которая использует функцию из dll. вот код
Код

...
using System.Runtime.InteropServices;

namespace TestComPortDll
{
    public partial class Form1 : Form
    {
        [DllImport("comport.dll")]
        public static extern int MyMessageBox(int hWnd, string Text, string Caption, int Type);
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MyMessageBox(0, "MessageBox", "", 0);
        }
    }
}

И написал длл на С++ в которой хранится ф-ция MyMessageBox. Код:
Код

// comport.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"


#ifdef _MANAGED
#pragma managed(push, off)
#endif

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
   return TRUE;
}
int MyMessageBox(int hWnd,char* Text,char* Caption, int Type)
{
    return MessageBoxA((HWND)hWnd,Text,Caption,Type);
}

#ifdef _MANAGED
#pragma managed(pop)
#endif


при нажатии на кнопку, прога (по идее) должна выдать обычный MessageBox, а выдает ошибку: "Unable to find an entry point named 'MyMessageBox' in DLL 'comport.dll'. "
Что я делаю не так, подскажите.
 Заранее благодарю.

PM MAIL ICQ   Вверх
Romikgy
Дата 10.12.2006, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Цитата(Brain @  10.12.2006,  19:56 Найти цитируемый пост)
Я написал прогу на С#

каким бобок это к си?

Цитата(Brain @  10.12.2006,  19:56 Найти цитируемый пост)
return MessageBoxA((HWND)hWnd,Text,Caption,Type);

это можешь заменить на MessageBoxA((HWND)0,Text,Caption,Type);
по крайней мере попробывать


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Brain
Дата 10.12.2006, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 10.12.2006
Где: Россия, Новочерка сск

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



Цитата

это можешь заменить на MessageBoxA((HWND)0,Text,Caption,Type)

Причем тут это? Она ведь не может найти точку входа.
ИМХО Я что-то делаю не так при определении ф-ции MyMessageBox в длл.
PM MAIL ICQ   Вверх
Sartorius
Дата 10.12.2006, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

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



Нет спецификаторов вызова функции - вот пример (ну у тебя соответственно не паскалевский вызов ))))
Код

#include <windows.h>

extern "C" FAR PASCAL _export void MyMessage()
{
 MessageBox(NULL,"Now You are in DLL!","Message from DLL",MB_OK);
}

BOOL WINAPI DllEntryPoint(HINSTANCE hInstDll, DWORD fdwReason, LPVOID lpvReserved)
{
 switch(fdwReason)
 {
   case DLL_PROCESS_ATTACH:
    MessageBox(NULL,"We are in DLL_PROCESS_ATTACH!","Dll Entry",MB_OK);
    break;
   case DLL_THREAD_ATTACH:
    MessageBox(NULL,"We are in DLL_TREAD_ATTACH!","Dll Entry",MB_OK);
    break;
   case DLL_PROCESS_DETACH:
    MessageBox(NULL,"We are in DLL_PROCESS_DETACH!","Dll Entry",MB_OK);
    break;
   case DLL_THREAD_DETACH:
    MessageBox(NULL,"We are in DLL_TREAD_DETACH!","Dll Entry",MB_OK);
    break;
 }
 return true;
}

PM MAIL ICQ   Вверх
Brain
Дата 10.12.2006, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 10.12.2006
Где: Россия, Новочерка сск

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



Сенк, а теперь можно разобрать все по полочкам?
Что такое спецификатор вызова функции?
Код

extern "C" FAR PASCAL _export void MyMessage()

Это в проге писать или в длл? Можешь обьяснить: Что эта строчка обозначает? А как мне написать другой вызов? Какие они(вызовы) бывают?



Код

 switch(fdwReason)
 {
   case DLL_PROCESS_ATTACH:
    MessageBox(NULL,"We are in DLL_PROCESS_ATTACH!","Dll Entry",MB_OK);
    break;
   case DLL_THREAD_ATTACH:
    MessageBox(NULL,"We are in DLL_TREAD_ATTACH!","Dll Entry",MB_OK);
    break;
   case DLL_PROCESS_DETACH:
    MessageBox(NULL,"We are in DLL_PROCESS_DETACH!","Dll Entry",MB_OK);
    break;
   case DLL_THREAD_DETACH:
    MessageBox(NULL,"We are in DLL_TREAD_DETACH!","Dll Entry",MB_OK);
    break;
 }

А это зачем нужно?

Это сообщение отредактировал(а) Brain - 10.12.2006, 22:11
PM MAIL ICQ   Вверх
Sartorius
Дата 10.12.2006, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

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



 Посмотри тут http://ru.wikipedia.org/wiki/DLL
PM MAIL ICQ   Вверх
Brain
Дата 10.12.2006, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 10.12.2006
Где: Россия, Новочерка сск

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



ЗАРАБОТАЛО! Спасибо!!!
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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