0

我有一个名为 DLP Discovery 4000 的硬件。它用于投影图像。它可以由用户编程。在硬件的编程指南中,它有一个可以在 DLL API 接口中访问的函数列表。该指南说这些函数可以通过 C++/C/Java 调用。

我希望能够在 C++ 程序中使用这些函数来控制电路板。但到目前为止,我一直在努力解决如何使用 DLL API。

它带有我安装的软件。该软件有一个功能有限的 GUI。此外,该软件在 windows 目录中放置了一个名为 D4000_usb.dll 的文件。如何使用这个 .dll 文件。

4

1 回答 1

2

I found this example of someone calling the same dll on the MSDN

I've annotated it with some helper comments prefixed // *** to give you some guidance

#include <windows.h> 
#include <stdio.h> 
#include <iostream>

typedef int (__cdecl *MYPROC)(LPWSTR); 

int main( void ) 
{ 

    HINSTANCE hinstLib; 
    MYPROC ProcAdd; 
    BOOL fFreeResult, fRunTimeLinkSuccess = FALSE; 

    // *** This loads the API DLL into you program

    // Get a handle to the DLL module.
    hinstLib = LoadLibrary(TEXT("D4000_usb.dll")); 


    // *** Now we check if it loaded ok - ie we should have a handle to it

    // If the handle is valid, try to get the function address.
    if (hinstLib != NULL) 
    { 

        // *** Now we try and get a handle to the function GetNumDev

        ProcAdd = (MYPROC) GetProcAddress(hinstLib, "GetNumDev"); 

       // *** Now we check if it that worked

        // If the function address is valid, call the function.
        if (NULL != ProcAdd) 
        {
            fRunTimeLinkSuccess = TRUE;

            // *** Now we call the function with a string parameter

            (ProcAdd) (L"Message sent to the DLL function\n"); 


            // *** this is where you need to check if the function call worked
            // *** and this where you need to read the manual to see what it returns

        }


       // *** Now we unload the API dll

        // Free the DLL module.
        fFreeResult = FreeLibrary(hinstLib); 
    } 

    // *** Here is a message to check if the the previous bit worked


    // If unable to call the DLL function, use an alternative.
    if (! fRunTimeLinkSuccess) 
        printf("Message printed from executable\n"); 

return 0;
}
于 2012-12-02T02:05:45.150 回答