MSI MysticLight-SDK Probleme

  • C#

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Takafusa.

    MSI MysticLight-SDK Probleme

    Hi,

    da mir ein Kollege meine Asus-Claymore Tastatur aus versehen kaputt gemacht hat ;( , habe ich mir eine neue gekauft. Habe mir dieses Set gekauft:
    de.msi.com/Gaming-Gear/VIGOR-GK30-COMBO

    Leider habe ich ein Problem mit dem SDK, ich habe erst mit C# versucht die Devices aufzulisten, bekomme aber immer eine -2 zurück(MLAPI_TIMEOUT), habe mir gedacht irgendwas muss ja falsch sein, habe dann eine C++ Anwendung erstellt, aber das gleiche. Danach habe ich mir andere Codes angesehen und getestet, auch immer eine -2, auch habe ich probiert, für AnyCPU, x86 und x64 zu kompilieren. Beim C# Code habe ich versucht, die Argumente für die Funktion als ref zu übergeben.

    Der C# Code
    Spoiler anzeigen

    C#-Quellcode

    1. public partial class FormMain : Form
    2. {
    3. [DllImport("MysticLight_SDK.dll")]
    4. extern static MLAPI_RESULT MLAPI_Initialize();
    5. [DllImport("MysticLight_SDK.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
    6. extern static MLAPI_RESULT MLAPI_GetDeviceInfo([MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_BSTR)] out string[] devTypes, [MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_BSTR)] out string[] ledCount);
    7. enum MLAPI_RESULT : int
    8. {
    9. MLAPI_OK = 0,
    10. MLAPI_ERROR = -1,
    11. MLAPI_TIMEOUT = -2,
    12. MLAPI_NO_IMPLEMENTED = -3,
    13. MLAPI_NOT_INITIALIZED = -4,
    14. MLAPI_INVALID_ARGUMENT = -101,
    15. MLAPI_DEVICE_NOT_FOUND = -102,
    16. MLAPI_NOT_SUPPORTED = -103
    17. }
    18. public FormMain()
    19. {
    20. InitializeComponent();
    21. }
    22. private void FormMain_Load(object sender, EventArgs e)
    23. {
    24. MLAPI_RESULT result = MLAPI_Initialize();
    25. Debug.WriteLine("MLAPI_Initialize: " + result);
    26. if (result == MLAPI_RESULT.MLAPI_OK)
    27. {
    28. string[] devTypes = new string[] { };
    29. string[] ledCount = new string[] { };
    30. result = MLAPI_GetDeviceInfo(out devTypes, out ledCount);
    31. Debug.WriteLine("MLAPI_GetDeviceInfo: " + result);
    32. }
    33. }
    34. }


    Der Code vom Versuch mit C++:
    Spoiler anzeigen

    C-Quellcode

    1. // original header aus dem SDK, nur #include <OAIdl.h> hinzugefügt
    2. // MysticLight_SDK.h : header file
    3. //
    4. #pragma once
    5. #include <OAIdl.h>
    6. typedef int (*LPMLAPI_Initialize)();
    7. typedef int (*LPMLAPI_GetDeviceInfo)(SAFEARRAY** pDevType, SAFEARRAY** pLedCount);
    8. typedef int (*LPMLAPI_GetDeviceName)(BSTR type, SAFEARRAY** pDevName);
    9. typedef int (*LPMLAPI_GetDeviceNameEx)(BSTR type, DWORD index, BSTR* pDevName);
    10. typedef int (*LPMLAPI_GetErrorMessage)(int ErrorCode, BSTR* pDesc);
    11. typedef int (*LPMLAPI_GetLedName)(BSTR type, SAFEARRAY** pLedName);
    12. typedef int (*LPMLAPI_GetLedInfo)(BSTR type, DWORD index, BSTR* pName, SAFEARRAY** pLedStyles);
    13. typedef int (*LPMLAPI_GetLedColor)(BSTR type, DWORD index, DWORD* R, DWORD* G, DWORD* B);
    14. typedef int (*LPMLAPI_GetLedStyle)(BSTR type, DWORD index, BSTR* style);
    15. typedef int (*LPMLAPI_GetLedMaxBright)(BSTR type, DWORD index, DWORD* maxLevel);
    16. typedef int (*LPMLAPI_GetLedBright)(BSTR type, DWORD index, DWORD* currentLevel);
    17. typedef int (*LPMLAPI_GetLedMaxSpeed)(BSTR type, DWORD index, DWORD* maxLevel);
    18. typedef int (*LPMLAPI_GetLedSpeed)(BSTR type, DWORD index, DWORD* currentLevel);
    19. typedef int (*LPMLAPI_SetLedColor)(BSTR type, DWORD index, DWORD R, DWORD G, DWORD B);
    20. typedef int (*LPMLAPI_SetLedColors)(BSTR type, DWORD AreaIndex, SAFEARRAY** pLedName, DWORD* R, DWORD* G, DWORD* B);
    21. typedef int (*LPMLAPI_SetLedColorEx)(BSTR type, DWORD AreaIndex, BSTR pLedName, DWORD R, DWORD G, DWORD B, DWORD );
    22. typedef int (*LPMLAPI_SetLedColorSync)(BSTR type, DWORD AreaIndex, BSTR pLedName, DWORD R, DWORD G, DWORD B, DWORD );
    23. typedef int (*LPMLAPI_SetLedStyle)(BSTR type, DWORD index, BSTR style);
    24. typedef int (*LPMLAPI_SetLedBright)(BSTR type, DWORD index, DWORD level);
    25. typedef int (*LPMLAPI_SetLedSpeed)(BSTR type, DWORD index, DWORD level);

    C-Quellcode

    1. #include <iostream>
    2. #include "MysticLight_SDK.h"
    3. HINSTANCE hinstance;
    4. const int MLAPI_OK = 0;
    5. struct MysticLight {
    6. LPMLAPI_Initialize init;
    7. LPMLAPI_GetErrorMessage errorMsg;
    8. LPMLAPI_GetDeviceInfo getDevInfo;
    9. LPMLAPI_GetLedInfo getLedInfo;
    10. LPMLAPI_GetLedColor getColor;
    11. LPMLAPI_GetLedStyle getStyle;
    12. LPMLAPI_GetLedMaxBright getMaxBright;
    13. LPMLAPI_GetLedBright getBright;
    14. LPMLAPI_GetLedMaxSpeed getMaxSpeed;
    15. LPMLAPI_GetLedSpeed getSpeed;
    16. LPMLAPI_SetLedColor setColor;
    17. LPMLAPI_SetLedStyle setStyle;
    18. LPMLAPI_SetLedBright setBright;
    19. LPMLAPI_SetLedSpeed setSpeed;
    20. } sdk;
    21. int main()
    22. {
    23. std::cout << "Try load lib" << std::endl;
    24. hinstance = LoadLibrary(TEXT("MysticLight_SDK_x64.dll"));
    25. if (hinstance)
    26. {
    27. sdk.init = (LPMLAPI_Initialize)GetProcAddress(hinstance, "MLAPI_Initialize");
    28. sdk.getDevInfo = (LPMLAPI_GetDeviceInfo)GetProcAddress(hinstance, "MLAPI_GetDeviceInfo");
    29. int status = sdk.init();
    30. if (status == MLAPI_OK)
    31. {
    32. std::cout << "Load lib OK" << std::endl;
    33. SAFEARRAY* devTypes;
    34. SAFEARRAY* ledCount;
    35. status = sdk.getDevInfo(&devTypes, &ledCount);
    36. std::cout << status << std::endl;
    37. }
    38. system("PAUSE");
    39. }
    40. else
    41. {
    42. std::cout << "Load lib FAILED" << std::endl;
    43. system("PAUSE");
    44. }
    45. return 0;
    46. }


    Hat das jemand von euch irgendwie hinbekommen? Was ist falsch?

    SDK-Doku:
    storage-asset.msi.com/files/pd…tware_Development_Kit.pdf

    Komischerweise kann ich mit dem MSI DragonCenter alles einstellen.

    *Topic verschoben*

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Ja, das habe ich direkt getan nachdem es mit C# und C++ nicht klappte. Auch dieses Projekt habe ich getestet, leider auch MLAPI_TIMEOUT.

    Gibt es vieleicht eine universelle Bibliothek welche dieses Set unterstützt, kennt da jemand eine?

    Ich bin doch ein Depp. Habe es mit Adminrechten probiert, auf einmal geht es.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Takafusa“ ()