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
Der Code vom Versuch mit C++:
Spoiler anzeigen
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*
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
C#-Quellcode
- public partial class FormMain : Form
- {
- [DllImport("MysticLight_SDK.dll")]
- extern static MLAPI_RESULT MLAPI_Initialize();
- [DllImport("MysticLight_SDK.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
- 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);
- enum MLAPI_RESULT : int
- {
- MLAPI_OK = 0,
- MLAPI_ERROR = -1,
- MLAPI_TIMEOUT = -2,
- MLAPI_NO_IMPLEMENTED = -3,
- MLAPI_NOT_INITIALIZED = -4,
- MLAPI_INVALID_ARGUMENT = -101,
- MLAPI_DEVICE_NOT_FOUND = -102,
- MLAPI_NOT_SUPPORTED = -103
- }
- public FormMain()
- {
- InitializeComponent();
- }
- private void FormMain_Load(object sender, EventArgs e)
- {
- MLAPI_RESULT result = MLAPI_Initialize();
- Debug.WriteLine("MLAPI_Initialize: " + result);
- if (result == MLAPI_RESULT.MLAPI_OK)
- {
- string[] devTypes = new string[] { };
- string[] ledCount = new string[] { };
- result = MLAPI_GetDeviceInfo(out devTypes, out ledCount);
- Debug.WriteLine("MLAPI_GetDeviceInfo: " + result);
- }
- }
- }
Der Code vom Versuch mit C++:
C-Quellcode
- // original header aus dem SDK, nur #include <OAIdl.h> hinzugefügt
- // MysticLight_SDK.h : header file
- //
- #pragma once
- #include <OAIdl.h>
- typedef int (*LPMLAPI_Initialize)();
- typedef int (*LPMLAPI_GetDeviceInfo)(SAFEARRAY** pDevType, SAFEARRAY** pLedCount);
- typedef int (*LPMLAPI_GetDeviceName)(BSTR type, SAFEARRAY** pDevName);
- typedef int (*LPMLAPI_GetDeviceNameEx)(BSTR type, DWORD index, BSTR* pDevName);
- typedef int (*LPMLAPI_GetErrorMessage)(int ErrorCode, BSTR* pDesc);
- typedef int (*LPMLAPI_GetLedName)(BSTR type, SAFEARRAY** pLedName);
- typedef int (*LPMLAPI_GetLedInfo)(BSTR type, DWORD index, BSTR* pName, SAFEARRAY** pLedStyles);
- typedef int (*LPMLAPI_GetLedColor)(BSTR type, DWORD index, DWORD* R, DWORD* G, DWORD* B);
- typedef int (*LPMLAPI_GetLedStyle)(BSTR type, DWORD index, BSTR* style);
- typedef int (*LPMLAPI_GetLedMaxBright)(BSTR type, DWORD index, DWORD* maxLevel);
- typedef int (*LPMLAPI_GetLedBright)(BSTR type, DWORD index, DWORD* currentLevel);
- typedef int (*LPMLAPI_GetLedMaxSpeed)(BSTR type, DWORD index, DWORD* maxLevel);
- typedef int (*LPMLAPI_GetLedSpeed)(BSTR type, DWORD index, DWORD* currentLevel);
- typedef int (*LPMLAPI_SetLedColor)(BSTR type, DWORD index, DWORD R, DWORD G, DWORD B);
- typedef int (*LPMLAPI_SetLedColors)(BSTR type, DWORD AreaIndex, SAFEARRAY** pLedName, DWORD* R, DWORD* G, DWORD* B);
- typedef int (*LPMLAPI_SetLedColorEx)(BSTR type, DWORD AreaIndex, BSTR pLedName, DWORD R, DWORD G, DWORD B, DWORD );
- typedef int (*LPMLAPI_SetLedColorSync)(BSTR type, DWORD AreaIndex, BSTR pLedName, DWORD R, DWORD G, DWORD B, DWORD );
- typedef int (*LPMLAPI_SetLedStyle)(BSTR type, DWORD index, BSTR style);
- typedef int (*LPMLAPI_SetLedBright)(BSTR type, DWORD index, DWORD level);
- typedef int (*LPMLAPI_SetLedSpeed)(BSTR type, DWORD index, DWORD level);
C-Quellcode
- #include <iostream>
- #include "MysticLight_SDK.h"
- HINSTANCE hinstance;
- const int MLAPI_OK = 0;
- struct MysticLight {
- LPMLAPI_Initialize init;
- LPMLAPI_GetErrorMessage errorMsg;
- LPMLAPI_GetDeviceInfo getDevInfo;
- LPMLAPI_GetLedInfo getLedInfo;
- LPMLAPI_GetLedColor getColor;
- LPMLAPI_GetLedStyle getStyle;
- LPMLAPI_GetLedMaxBright getMaxBright;
- LPMLAPI_GetLedBright getBright;
- LPMLAPI_GetLedMaxSpeed getMaxSpeed;
- LPMLAPI_GetLedSpeed getSpeed;
- LPMLAPI_SetLedColor setColor;
- LPMLAPI_SetLedStyle setStyle;
- LPMLAPI_SetLedBright setBright;
- LPMLAPI_SetLedSpeed setSpeed;
- } sdk;
- int main()
- {
- std::cout << "Try load lib" << std::endl;
- hinstance = LoadLibrary(TEXT("MysticLight_SDK_x64.dll"));
- if (hinstance)
- {
- sdk.init = (LPMLAPI_Initialize)GetProcAddress(hinstance, "MLAPI_Initialize");
- sdk.getDevInfo = (LPMLAPI_GetDeviceInfo)GetProcAddress(hinstance, "MLAPI_GetDeviceInfo");
- int status = sdk.init();
- if (status == MLAPI_OK)
- {
- std::cout << "Load lib OK" << std::endl;
- SAFEARRAY* devTypes;
- SAFEARRAY* ledCount;
- status = sdk.getDevInfo(&devTypes, &ledCount);
- std::cout << status << std::endl;
- }
- system("PAUSE");
- }
- else
- {
- std::cout << "Load lib FAILED" << std::endl;
- system("PAUSE");
- }
- return 0;
- }
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“ ()