User forums > Using Code::Blocks
Excel and dll compiled in Code:blocks
Koryf21:
Hello,
I am new user to Code:Blocks and I woud like to know how it is possible to compile a dll in Code:Blocks so it can be imported in Excel (2003) via VB 6.0 ? I would like to avoid in future to use Visual Studio C++...
Thank you in advance !
Cheers,
Patrick
I tried this but Excel doesn't seem to find it.
#include <windows.h>
#ifdef BUILD_DLL
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT
#endif
// a sample exported function
int DLL_EXPORT SomeFunction(const double somedouble)
{
return 1;
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
// attach to process
// return FALSE to fail DLL load
break;
case DLL_PROCESS_DETACH:
// detach from process
break;
case DLL_THREAD_ATTACH:
// attach to thread
break;
case DLL_THREAD_DETACH:
// detach from thread
break;
}
return TRUE; // succesful
alchemist:
Hello,
You have then to declare the exported functions within VBA (using the Declare statement). See the VB help to have the right syntax.
EDIT:
--- Code: ---Declare Function SomeFunction lib "MyDLL.dll" Alias "SomeFunction" (ByVal SomeDouble As Double) As Integer
--- End code ---
Koryf21:
Hello again,
Thank you for the answer :D but still I get the sad "#VALUE" from excel :(.
I did the following wrapping of the Dll call in vba:
Declare Function SomeFunction Lib "Sample.dll" (ByVal SomeDouble As Double) As Integer
Function testsample()
Dim ld_int As Integer
Dim ld_double As Double
ld_double = 0
ld_int = SomeFunction(ld_double)
testsample = ld_int
End Function
I believe I miss something when I compile the dll ???
Thanks again,
Patrick
Mahobi:
Hello,
maybe this could help you:
http://www.mingw.org/MinGWiki/index.php/VB-MinGW-DLL
VB and VBA have some restrictions usung standard dlls.
Koryf21:
Thanks for the comment :D.
I still have the same "#VALUE!" in Excel.
Did I miss the linker flags ? I put "--add-stdcall-alias" in the "other linker options" field of "Code::Blocks" ? Is that correct ? Is there a way to check at least that the dll is loaded ?
I modified the sample code according to the previous reply to:
#include <windows.h>
#ifdef BUILD_DLL
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT
#endif
// a sample exported function
DLL_EXPORT int __stdcall SomeFunction(const double somedouble)
{
//MessageBoxA(0, somedouble, "DLL Message", MB_OK | MB_ICONINFORMATION);
return 1;
}
DLL_EXPORT BOOL __stdcall DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
// attach to process
// return FALSE to fail DLL load
break;
case DLL_PROCESS_DETACH:
// detach from process
break;
case DLL_THREAD_ATTACH:
// attach to thread
break;
case DLL_THREAD_DETACH:
// detach from thread
break;
}
return TRUE; // succesful
}
Navigation
[0] Message Index
[#] Next page
Go to full version