Hallo zusammen,
ich möchte für eine Sensoransteuerung(IMU-Sensor) eine dll schreiben, sodass man die Funktionen wie Daten senden, Daten anfordern usw. einfach nur in die GUI rein importieren muss und die gleichen Funktionen für mehrere Programme nutzen kann.
Der Hersteller hat eine Beispiele mit Code mitgeliefert, die alle in C geschrieben sind. Daher wollte ich die meisten Daten einfach verwenden. Ich habe ein sehr gutes Beispiel gefunden, wo erklärt wird wie man eine C-dll in VB nutzen kann. Austausch von Daten zwischen einer VB.NET-exe und einer C-DLL, 32 und 64 Bit
Als erstes wollte ich ein Beispiel eines Herstellers übernehmen und in eine Funktion packen, sodass ich das Beispiel aus meiner VB-Gui aus starten kann.
Dazu habe ich alle Header-Files genommen, die auch im Beispiel vorkammen, eingebunden und auch die Header-Files geöffnet und da entsprechend die #include Befehle angepasst. Hier der Code des cpp-Files
Zu einem bekomme ich den Fehler, bei der Zeile
Error C2146 syntax error: missing ';' before identifier 'device' MFCLibrary1 U:\GUI_Visual_Basic\MFCLibrary1\MFCLibrary1\Sensoransteuerung.cpp 50
Ansonsten den gleichen Fehler (nur die Zeile ist immer anders)
Error (active) redeclaration cannot add dllexport/dllimport to "WSASetLastError" (declared at line 873 of "c:\Program Files (x86)\Windows Kits\8.1\Include\um\winsock.h") MFCLibrary1 c:\Program Files (x86)\Windows Kits\8.1\Include\um\WinSock2.h 2407
Ich danke euch schonmal im Voraus!!
* Thema verschoben *
ich möchte für eine Sensoransteuerung(IMU-Sensor) eine dll schreiben, sodass man die Funktionen wie Daten senden, Daten anfordern usw. einfach nur in die GUI rein importieren muss und die gleichen Funktionen für mehrere Programme nutzen kann.
Der Hersteller hat eine Beispiele mit Code mitgeliefert, die alle in C geschrieben sind. Daher wollte ich die meisten Daten einfach verwenden. Ich habe ein sehr gutes Beispiel gefunden, wo erklärt wird wie man eine C-dll in VB nutzen kann. Austausch von Daten zwischen einer VB.NET-exe und einer C-DLL, 32 und 64 Bit
Als erstes wollte ich ein Beispiel eines Herstellers übernehmen und in eine Funktion packen, sodass ich das Beispiel aus meiner VB-Gui aus starten kann.
Dazu habe ich alle Header-Files genommen, die auch im Beispiel vorkammen, eingebunden und auch die Header-Files geöffnet und da entsprechend die #include Befehle angepasst. Hier der Code des cpp-Files
C-Quellcode
- /*
- * Copyright(c) 2009 - 2013, Hillcrest Laboratories, Inc.
- * All rights reserved.
- */
- #include "include/freespace/freespace.h"
- #include "include/freespace/freespace_codecs.h"
- #include "include/freespace/freespace_common.h"
- #include "include/freespace/freespace_deviceTable.h"
- #include "include/freespace/freespace_printers.h"
- #include "include/freespace/freespace_util.h"
- #include "appControlHandler.h"
- #include <string.h>
- #include "stdafx.h"
- #ifdef _WIN32
- #include "WIN32\stdafx.h"
- #else
- #include <stdio.h>
- #include <stdlib.h>
- #endif
- // Cross platform sleep macro
- #ifdef _WIN32
- #define SLEEP Sleep(200)
- #else
- #include <unistd.h>
- #define SLEEP sleep(1)
- #endif
- #define EXPORT32 extern "C" __declspec(dllexport)
- FreespaceDeviceId device; // Keep track of the device you are talking to
- struct freespace_message send; // A place to create messages to send to the device
- struct freespace_message receive; // A place to put a message received from the device
- int numIds; // Keep track of how many devices are available
- int rc; // Return Code
- int retryCount = 0; // How many times tried so far to get a response
- // Flag to indicate that the application should quit
- // Set by the control signal handler
- int quit = 0;
- // Limit on how many times to try to get a response
- #define RETRY_COUNT_LIMIT 100
- EXPORT32 int _stdcall TestFunction()
- // einfacher Aufruf einer Prozedur
- {
- addControlHandler(&quit);
- // Initialize the freespace library
- rc = freespace_init();
- if (rc != FREESPACE_SUCCESS) {
- //printf("Initialization error. rc=%d\n", rc);
- return 1;
- }
- //printf("Scanning for Freespace devices...\n");
- // Get the ID of the first device in the list of availble devices
- rc = freespace_getDeviceList(&device, 1, &numIds);
- if (numIds == 0) {
- //printf("Didn't find any devices.\n");
- return 1;
- }
- //printf("Found a device. Trying to open it...\n");
- // Prepare to communicate with the device found above
- rc = freespace_openDevice(device);
- if (rc != FREESPACE_SUCCESS) {
- //printf("Error opening device: %d\n", rc);
- return 1;
- }
- // Display the device information.
- printDeviceInfo(device);
- // Make sure any old messages are cleared out of the system
- rc = freespace_flush(device);
- if (rc != FREESPACE_SUCCESS) {
- //printf("Error flushing device: %d\n", rc);
- return 1;
- }
- //printf("Requesting battery level messages.\n");
- memset(&send, 0, sizeof(send)); // Start with a clean message struct
- // Populate the message fields. Two options are shown below. Uncomment one desired
- // and comment out the one not desired.
- //send.messageType = FREESPACE_MESSAGE_BATTERYLEVELREQUEST; // To send a battery level request
- send.messageType = FREESPACE_MESSAGE_PRODUCTIDREQUEST; // To send a product ID request
- while (!quit) {
- if (retryCount < RETRY_COUNT_LIMIT) {
- retryCount++;
- // Send the message constructed above.
- rc = freespace_sendMessage(device, &send);
- if (rc != FREESPACE_SUCCESS) {
- //printf("Could not send message: %d.\n", rc);
- }
- // Read the response message.
- rc = freespace_readMessage(device, &receive, 100);
- if (rc == FREESPACE_SUCCESS) {
- // Print the received message
- freespace_printMessage(stdout, &receive);
- retryCount = 0;
- }
- else if (rc == FREESPACE_ERROR_TIMEOUT) {
- //printf("<timeout> Try moving the Freespace device to wake it up.\n");
- }
- else if (rc == FREESPACE_ERROR_INTERRUPTED) {
- //printf("<interrupted>\n");
- }
- else {
- /*printf("Error reading: %d. Quitting...\n", rc);*/
- break;
- }
- }
- else {
- /*printf("Did not receive response after %d trials\n", RETRY_COUNT_LIMIT);*/
- quit = 1;
- }
- SLEEP;
- }
- /*printf("Cleaning up...\n");*/
- freespace_closeDevice(device);
- freespace_exit();
- return 0;
- }
Zu einem bekomme ich den Fehler, bei der Zeile
Error C2146 syntax error: missing ';' before identifier 'device' MFCLibrary1 U:\GUI_Visual_Basic\MFCLibrary1\MFCLibrary1\Sensoransteuerung.cpp 50
Ansonsten den gleichen Fehler (nur die Zeile ist immer anders)
Error (active) redeclaration cannot add dllexport/dllimport to "WSASetLastError" (declared at line 873 of "c:\Program Files (x86)\Windows Kits\8.1\Include\um\winsock.h") MFCLibrary1 c:\Program Files (x86)\Windows Kits\8.1\Include\um\WinSock2.h 2407
Ich danke euch schonmal im Voraus!!
* Thema verschoben *
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „hal2000“ ()