Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

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


Новичок



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

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



Здравствуйте.
У меня проблемы при создании dll в Visual Studio .Net ( создание: VC++ Win32 project а Application settings - DLL ). 


Код

//XDll.cpp
#include "stdafx.h"
#include "XDll.h"
BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
                     )
{
    return TRUE;
}
__declspec(dllexport) int getSum( int n1, int n2)
{
    return n1 + n2;




Код

//XDll.h
extern "C" __declspec(dllexport) int getSum(int n1, int n2);



DLL делаю для MS EXCEL (VBA) – так поставлена задача. Через Tool а References… не подключается. Через объявление:

Код

Private Declare Function getSum Lib "C:\Excel\XDll.dll" (ByVal x As Integer, ByVal y As Integer) As Integer
-------------------------------------------------------------------------------------------------------
Private Sub CommandButton1_Click()
    Lab1.Caption = getSum(CInt(TextBox1.Text), CInt(TextBox2.Text)) 
‘тут выдает ошибку «Run-time error ’49’: Bad DLL calling convention»
End Sub


Это мой первый эксперимент с dll.  Подскажите где протупил smile Может есть еще какой-то способ создания dll на VC++ (в Visual Studio) и подключить ее в проект VBA? 
Заранее спасибо за ответы.

Добавлено @ 13:53 
Бьюсь над этой проблеммой не один день  smile  smile  smile  smile  smile  smile  smile   

Это сообщение отредактировал(а) Fixin - 26.7.2006, 20:16
PM MAIL   Вверх
dumb
Дата 26.7.2006, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



__stdcall в объявление экспортируемой функции добавь 
PM MAIL   Вверх
bel_nikita
Дата 26.7.2006, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



в младших версиях VC для DLL нужен .def - файл с описанием экпортируеымх функций 


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
stic
  Дата 28.7.2006, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Все таки создал DLL  на C++ Builder 6.0, а так же и тестовое приложение к нему тоже на C++ Builder 6.0. DLL работает. Начал подключать к MS Excel через:
Private Declare Function Message Lib " C:\Project\mydll.dll " (x As Long, y As Long) As Long

Возникает ошибка:
Can’t find DLL entry point Message in C:\Project\mydll.dll

Может в функцию DllEntryPoint (точка входа в DLL) нужно добавить чета. 

Код

int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
        return 1;
}


Я пробовал и оптимизацию с VC++:

Код

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
        return 1;
}


Посоветуйте решение. 
Заранее спасибо за ответы.

Модератор: научись, наконец, пользоваться оформлением
  

Это сообщение отредактировал(а) Fixin - 28.7.2006, 21:29
PM MAIL   Вверх
bel_nikita
Дата 28.7.2006, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



случайно MFC не используешь? 


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
stic
Дата 28.7.2006, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нет, с MFC не работаю. А он может мне как-то помоч в решении проблеммы? 
PM MAIL   Вверх
GremlinProg
Дата 28.7.2006, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



попробуй добавить к DllMain extern "C"
Код

extern "C"
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved){
}


Добавлено @ 22:52 
или просто extern, не знаю точно, какой синтаксис нужен для экспорта в VBA, попробуй оба варианта 


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
np9mi7
  Дата 28.7.2006, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

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



Цитата
Все таки создал DLL  на C++ Builder 6.0, а так же и тестовое приложение к нему тоже на C++ Builder 6.0. DLL работает. Начал подключать к MS Excel через:
Private Declare Function Message Lib " C:\Project\mydll.dll " (x As Long, y As Long) As Long
Builder собирает dll в OMF формате, может от этого и возникают проблемы;

Для нормальной работой в VB создай *.def для превдонимов имен функций и обязательно для всех функций используй __stdcall соглашение о вызове; 


--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
Damarus
Дата 29.7.2006, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

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



Цитата(np9mi7 @  28.7.2006,  23:58 Найти цитируемый пост)
Builder собирает dll в OMF формате, может от этого и возникают проблемы;

Может я чего то не понял, но мне казалось dll имеет PE формат.
 
PM MAIL ICQ Jabber   Вверх
GremlinProg
Дата 29.7.2006, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



видимо np9mi7 имеет ввиду lib файлы
Цитата

LINK accepts .obj files that are either Common Object File Format (COFF) or 32-bit Object Module Format (OMF)

почти тот же COFF, только еще с дебагом до кучи. 


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Mad
Дата 1.8.2006, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Цитата(stic @  26.7.2006,  12:50 Найти цитируемый пост)

__declspec(dllexport) int getSum( int n1, int n2)
{
    return n1 + n2;
}

Тут ты определяеш ее как C++ (т.е. с добавлением типов к имени)

Цитата(stic @  26.7.2006,  12:50 Найти цитируемый пост)

extern "C" __declspec(dllexport) int getSum(int n1, int n2);

[/quote]
а тут без добавления



--------------------
user posted image
PM MAIL   Вверх
supersonic
Дата 15.9.2006, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А может этот ексель хочет что бы длл-мэйн была экспортируемой ? Стоит глянуть на чужые длл-ки для этого экселя и посмотреть какие функ. эти длл экспортируют.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

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


 




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


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

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