powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Проблем с DLL
9 сообщений из 9, страница 1 из 1
Проблем с DLL
    #33880974
qsticp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
У меня проблемы при создании 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. Подскажите где протупил :( Может есть еще какой-то способ создания dll на VC++ (в Visual Studio) и подключить ее в проект VBA?
Заранее спасибо за ответы.
...
Рейтинг: 0 / 0
Проблем с DLL
    #33881023
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблем с вызовом быть не дожно. Вероятно неправильно создаешь библиотеку на сях. Думаю лучше будет перенести это топик в C++, ибо проблема все-таки из их области.

Magnus
...
Рейтинг: 0 / 0
Проблем с DLL
    #33881024
michael23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тоже долго тренировался с этим нашел метом проб и ошибок,
но я делаю dll на С# в VS2005
в проекте (Вкладка Build) cтавлю галку "Register for COM interop"
компилирую проект создает вместе с "dll" и "tlb" (как обертку dll) - файл, его можно в VBA подключить через References->Add,
далее инициализируеш, например так

Dim ptDLL As MyDllRez.Class1
Set ptDLL = New MyDllRez.Class1

или через CreateObject и пользуешся

ptDLL.Мой_метод(арг1, ...)

Надобность в Declare отпадает (у меня только с системными функциями работает, а со своими выдавал что не находит точку входа)
...
Рейтинг: 0 / 0
Проблем с DLL
    #33881321
AndreyMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автортут выдает ошибку «Run-time error ’49’: Bad DLL calling convention» Попробуй dll компилить не в NET-е.
Я вообще их в основном на PB пишу.
...
Рейтинг: 0 / 0
Проблем с DLL
    #33883676
bac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так же сталкнулся с такой проблемой.
У меня были старые DLL, они без проблем собирались и подгружались в VB6
А тут мне понадобилось новую библиотеку DLL :(
Короче получилось так в Visual Studio Net С++ создал проект с DLL, в него вставил свои дела и все заработало.
...
Рейтинг: 0 / 0
Проблем с DLL
    #33884377
qsticp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все таки создал 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;
}

Посоветуйте решение.
Заранее спасибо за ответы.
...
Рейтинг: 0 / 0
Проблем с DLL
    #33884923
AndreyMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тебе однозначно в форум по С++ надо обратиться. Проблема в dll, которую ты на сях пишешь.
...
Рейтинг: 0 / 0
Проблем с DLL
    #33886004
bac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 qsticp

Я меня же была такая же проблема. Я ее решил, как описано выше.
...
Рейтинг: 0 / 0
Проблем с DLL
    #33886358
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qsticpВсе таки создал 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Функции DllEntryPoint и DllMain тебе нафиг не нужны.
А нужно тебе всего-лишь запустить программку depends.exe из состава VC и посмотерть под каким именем твоя функция Message была экспортирована. Скорее всего это либо _Message либо _Message@4. И тогда в Бейсике пишешь:
Код: plaintext
Private Declare Function Message Lib "C:\Project\mydll.dll" Alias "_Message"  (x As Long, y As Long) As Long
или
Код: plaintext
Private Declare Function Message Lib "C:\Project\mydll.dll" Alias "_Message@4"  (x As Long, y As Long) As Long

Как вариант, убираешь из своего C-исходника dll эти уродские __declspec(dllexpot) и используешь def-файл.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Проблем с DLL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]