User forums > Using Code::Blocks

Excel and dll compiled in Code:blocks

(1/2) > >>

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