| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Excel и подключение DLL |
| Автор: stic 26.7.2006, 12:20 |
| Здравствуйте. У меня проблемы при создании 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. Подскажите где протупил Заранее спасибо за ответы. |
| Автор: vvpC 26.7.2006, 12:37 |
| сишный int это басюковый long - декларация в васике написана неправильно - везде long надо писать а для нужно COM dll делать |
| Автор: stic 26.7.2006, 13:52 |
| Я попробовал с изменением типов, но увы тоже самое «Run-time error ’49’: Bad DLL calling convention» |
| Автор: stic 28.7.2006, 10:07 |
| Все таки создал 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; } Посоветуйте решение. Заранее спасибо за ответы. |
| Автор: Alexei 4.8.2006, 19:19 |
| Я не очень-то программист, но пару лет назад игрался с ВБ и ВС даже с массивами. Помню, там была одна заморочка. Надо было запускать dumpbin и находить точку входа. Там будет, что-то типа: _getSum@* , а в деф файле надо написать: EXPORTS getSum = _getSum@* |