/[CLI] Rückgabe eines Enums funktioniert nicht

  • C++

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Wulf.

    /[CLI] Rückgabe eines Enums funktioniert nicht

    Hallo,
    ich habe gestern begonnen einen Wrapper für eine C-Bibliothek mit Hilfe von c++/CLI neu zu schreiben. Wenn ich nun versuche bei einer Funktion ein Managed-Enum zurückzugeben erhalte ich den Fehler:
    Fehler:

    Quellcode

    1. error C2371: 'PicoNet::USBPT104::USBPT104Functions::CloseUnit': Neudefinition; unterschiedliche Basistypen
    2. error C2556: 'PicoNet::PicoStatus PicoNet::USBPT104::USBPT104Functions::CloseUnit(float)': Überladene Funktion unterscheidet sich nur hinsichtlich des Rückgabetyps von 'int PicoNet::USBPT104::USBPT104Functions::CloseUnit(float)'
    3. error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.


    Mein bisheriger Code:
    Code:

    USBPT104Functions.cpp

    C-Quellcode

    1. #include "stdafx.h"
    2. #include "USBPT104Functions.h"
    3. #include "PicoStatusInfo.h"
    4. #include "UsbPt104Api.h"
    5. namespace PicoNet {
    6. namespace USBPT104 {
    7. PicoStatus USBPT104Functions::CloseUnit(System::Single handle) {
    8. unsigned long status = UsbPt104CloseUnit(handle);
    9. return PicoStatus::OK;
    10. }
    11. }
    12. }

    USBPT104Functions.h

    Quellcode

    1. #pragma once
    2. namespace PicoNet {
    3. namespace USBPT104 {
    4. public ref class USBPT104Functions
    5. {
    6. public:
    7. static PicoStatus CloseUnit(System::Single handle);
    8. };
    9. }
    10. }

    PicoStatusInfo.h

    Quellcode

    1. namespace PicoNet {
    2. public enum class PicoInfo
    3. {
    4. DRIVER_VERSION = 0x00000000UL,
    5. USB_VERSION,
    6. HARDWARE_VERSION,
    7. VARIANT_INFO,
    8. BATCH_AND_SERIAL,
    9. CAL_DATE,
    10. KERNEL_VERSION,
    11. DIGITAL_HARDWARE_VERSION,
    12. ANALOGUE_HARDWARE_VERSION,
    13. FIRMWARE_VERSION_1,
    14. FIRMWARE_VERSION_2,
    15. MAC_ADDRESS,
    16. };
    17. public enum class PicoStatus
    18. {
    19. OK = 0x00000000UL,
    20. MAX_UNITS_OPENED,
    21. MEMORY_FAI,
    22. NOT_FOUND,
    23. FW_FAIL,
    24. OPEN_OPERATION_IN_PROGRESS,
    25. OPERATION_FAILED,
    26. NOT_RESPONDING,
    27. CONFIG_FAIL,
    28. KERNEL_DRIVER_TOO_OLD,
    29. EEPROM_CORRUPT,
    30. OS_NOT_SUPPORTED,
    31. INVALID_HANDLE,
    32. INVALID_PARAMETER,
    33. INVALID_TIMEBASE,
    34. INVALID_VOLTAGE_RANGE,
    35. INVALID_CHANNEL,
    36. INVALID_TRIGGER_CHANNEL,
    37. INVALID_CONDITION_CHANNEL,
    38. NO_SIGNAL_GENERATOR,
    39. STREAMING_FAILED,
    40. BLOCK_MODE_FAILED,
    41. NULL_PARAMETER,
    42. ETS_MODE_SET,
    43. DATA_NOT_AVAILABLE,
    44. STRING_BUFFER_TO_SMALL,
    45. ETS_NOT_SUPPORTED,
    46. AUTO_TRIGGER_TIME_TO_SHORT,
    47. BUFFER_STALL,
    48. TOO_MANY_SAMPLES,
    49. TOO_MANY_SEGMENTS,
    50. PULSE_WIDTH_QUALIFIER,
    51. DELAY,
    52. SOURCE_DETAILS,
    53. CONDITIONS,
    54. USER_CALLBACK,
    55. DEVICE_SAMPLING,
    56. NO_SAMPLES_AVAILABLE,
    57. SEGMENT_OUT_OF_RANGE,
    58. BUSY,
    59. STARTINDEX_INVALID,
    60. INVALID_INFO,
    61. INFO_UNAVAILABLE,
    62. INVALID_SAMPLE_INTERVAL,
    63. TRIGGER_ERROR,
    64. MEMORY,
    65. SIG_GEN_PARAM,
    66. SHOTS_SWEEPS_WARNING,
    67. SIGGEN_TRIGGER_SOURCE,
    68. AUX_OUTPUT_CONFLICT,
    69. AUX_OUTPUT_ETS_CONFLICT,
    70. WARNING_EXT_THRESHOLD_CONFLICT,
    71. WARNING_AUX_OUTPUT_CONFLICT,
    72. SIGGEN_OUTPUT_OVER_VOLTAGE,
    73. DELAY_NULL,
    74. INVALID_BUFFER,
    75. SIGGEN_OFFSET_VOLTAGE,
    76. SIGGEN_PK_TO_PK,
    77. CANCELLED,
    78. SEGMENT_NOT_USED,
    79. INVALID_CALL,
    80. GET_VALUES_INTERRUPTED,
    81. NOT_USED = 0x0000003FUL,
    82. INVALID_SAMPLERATIO,
    83. INVALID_STATE,
    84. NOT_ENOUGH_SEGMENTS,
    85. DRIVER_FUNCTION,
    86. RESERVED,
    87. INVALID_COUPLING,
    88. BUFFERS_NOT_SET,
    89. RATIO_MODE_NOT_SUPPORTED,
    90. RAPID_NOT_SUPPORT_AGGREGATION,
    91. INVALID_TRIGGER_PROPERTY,
    92. INTERFACE_NOT_CONNECTED,
    93. RESISTANCE_AND_PROBE_NOT_ALLOWED,
    94. POWER_FAILED,
    95. SIGGEN_WAVEFORM_SETUP_FAILED,
    96. FPGA_FAIL,
    97. POWER_MANAGER,
    98. INVALID_ANALOGUE_OFFSET,
    99. PLL_LOCK_FAILED,
    100. ANALOG_BOARD,
    101. CONFIG_FAIL_AWG,
    102. INITIALISE_FPGA,
    103. EXTERNAL_FREQUENCY_INVALID = 0x00000056UL,
    104. CLOCK_CHANGE_ERROR,
    105. TRIGGER_AND_EXTERNAL_CLOCK_CLASH,
    106. PWQ_AND_EXTERNAL_CLOCK_CLASH,
    107. UNABLE_TO_OPEN_SCALING_FILE,
    108. MEMORY_CLOCK_FREQUENCY,
    109. I2C_NOT_RESPONDING,
    110. NO_CAPTURES_AVAILABLE,
    111. NOT_USED_IN_THIS_CAPTURE_MODE,
    112. GET_DATA_ACTIVE = 0x00000103UL,
    113. IP_NETWORKED,
    114. INVALID_IP_ADDRESS,
    115. IPSOCKET_FAILED,
    116. IPSOCKET_TIMEDOUT,
    117. SETTINGS_FAILED,
    118. NETWORK_FAILED,
    119. WS2_32_DLL_NOT_LOADED,
    120. INVALID_IP_PORT,
    121. COUPLING_NOT_SUPPORTED,
    122. BANDWIDTH_NOT_SUPPORTED,
    123. INVALID_BANDWIDTH,
    124. AWG_NOT_SUPPORTED,
    125. ETS_NOT_RUNNING,
    126. SIG_GEN_WHITENOISE_NOT_SUPPORTED,
    127. SIG_GEN_WAVETYPE_NOT_SUPPORTED,
    128. INVALID_DIGITAL_PORT,
    129. INVALID_DIGITAL_CHANNEL,
    130. INVALID_DIGITAL_TRIGGER_DIRECTION,
    131. SIG_GEN_PRBS_NOT_SUPPORTED,
    132. ETS_NOT_AVAILABLE_WITH_LOGIC_CHANNELS,
    133. WARNING_REPEAT_VALUE,
    134. POWER_SUPPLY_CONNECTED,
    135. POWER_SUPPLY_NOT_CONNECTED,
    136. POWER_SUPPLY_REQUEST_INVALID,
    137. POWER_SUPPLY_UNDERVOLTAGE,
    138. CAPTURING_DATA,
    139. USB3_0_DEVICE_NON_USB3_0_PORT,
    140. WATCHDOGTIMER = 0x10000000UL
    141. };
    142. }



    Wenn ich anstatt dem Enum eine unsigned long oder irgend einen anderen Standardtypen zurückgebe funktioniert es.

    Ich hoffe ihr könnt mir helfen.

    Grüße Wulf
    Präzisiere mal den Namespace des Enums in der Deklaration und Implementierung der Prozedur:

    C-Quellcode

    1. static PicoNet::PicoStatus CloseUnit(System::Single handle);
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hilft leider auch nichts. Jetzt ist komischerweise dieser Fehler noch hinzugekommen:

    Quellcode

    1. error C2039: 'PicoStatus': Ist kein Element von 'PicoNet'

    Was ich nicht wirklich verstehe da mir Intellisens "PicoNet::PicoStatus" sogar anbietet.
    Ein Fehler den ich vorhin nicht erwähnt habe da ich ihn für irrelevant hielt ist noch:

    Quellcode

    1. error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'CloseUnit'

    Er bezieht sich auf die Zeile: static PicoNet::PicoStatus CloseUnit(System::Single handle);
    Vielleicht ist er ja doch nicht.
    Pack den Include aus der CPP- in die H-Datei:
    #include "PicoStatusInfo.h"
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!