|
|
|
Проблем с DLL
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. У меня проблемы при создании 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? Заранее спасибо за ответы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2006, 00:57 |
|
||
|
Проблем с DLL
|
|||
|---|---|---|---|
|
#18+
Проблем с вызовом быть не дожно. Вероятно неправильно создаешь библиотеку на сях. Думаю лучше будет перенести это топик в C++, ибо проблема все-таки из их области. Magnus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2006, 04:13 |
|
||
|
Проблем с DLL
|
|||
|---|---|---|---|
|
#18+
Тоже долго тренировался с этим нашел метом проб и ошибок, но я делаю 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 отпадает (у меня только с системными функциями работает, а со своими выдавал что не находит точку входа) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2006, 04:16 |
|
||
|
Проблем с DLL
|
|||
|---|---|---|---|
|
#18+
автортут выдает ошибку «Run-time error ’49’: Bad DLL calling convention» Попробуй dll компилить не в NET-е. Я вообще их в основном на PB пишу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2006, 10:15 |
|
||
|
Проблем с DLL
|
|||
|---|---|---|---|
|
#18+
Так же сталкнулся с такой проблемой. У меня были старые DLL, они без проблем собирались и подгружались в VB6 А тут мне понадобилось новую библиотеку DLL :( Короче получилось так в Visual Studio Net С++ создал проект с DLL, в него вставил свои дела и все заработало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2006, 21:54 |
|
||
|
Проблем с DLL
|
|||
|---|---|---|---|
|
#18+
Все таки создал 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; } Посоветуйте решение. Заранее спасибо за ответы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2006, 10:41 |
|
||
|
Проблем с DLL
|
|||
|---|---|---|---|
|
#18+
Тебе однозначно в форум по С++ надо обратиться. Проблема в dll, которую ты на сях пишешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2006, 12:46 |
|
||
|
Проблем с DLL
|
|||
|---|---|---|---|
|
#18+
2 qsticp Я меня же была такая же проблема. Я ее решил, как описано выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2006, 16:53 |
|
||
|
Проблем с DLL
|
|||
|---|---|---|---|
|
#18+
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 Код: plaintext Как вариант, убираешь из своего C-исходника dll эти уродские __declspec(dllexpot) и используешь def-файл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2006, 19:26 |
|
||
|
|

start [/forum/topic.php?fid=60&fpage=272&tid=2165520]: |
0ms |
get settings: |
6ms |
get forum list: |
22ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 213ms |
| total: | 341ms |

| 0 / 0 |
