Реализация функций C ++ DLL на базе кода VB для Windows CE 6 Windows. NET Compact Framework 3.5 устройств - PullRequest
0 голосов
/ 22 января 2020

Мне нужна помощь в реализации mBedSSL для Windows CE 6 устройств. Я пытался добиться этого, создав DLL на C ++, написанную на Visual Studio 2008, а затем импортировав DLL в большой существующий проект, написанный на VB

. До сих пор я мог компилировать DLL без предупреждений и ошибок. однако, когда я внедряю код и устанавливаю CAB-файл на устройстве Windows CE 6, я получаю сообщение об ошибке «Не удается найти PInvoke DLL« mydll.dll »» с исключением отсутствующего метода

Вот что До сих пор я работал с C ++ DLL.

  • Создан проект Win32 Smart Device
  • для «Выбранных SDK». Я выбрал Windows CE 6 SDK only
  • для Типа приложения я выбрал DLL

Я установил следующие настройки

  • Тип конфигурации = (.dll)
  • Файл определения модуля = mydll .def
  • Предварительно скомпилированный заголовок = Не использовать предварительно скомпилированные заголовки (вызывало ошибки)
  • Компиляция для архитектуры = ARM4 (/ QRarch4)
  • Устройство развертывания = Windows CE 6 SDK ARMV4I Устройство

Проект приложения VB - это Windows CE 6 Project (и устройства запускают ARM)

Поэтому я считаю, что эта ошибка PInvoke, которую я получаю, является моей собственной ошибкой, но я исчерпал свой поиск в выяснить, где (это мой первый раз, когда я создаю dll), я не мог добавить свою dll в качестве ссылки в проекте VB, она просто утверждает, что «ссылка на mydll.dll» не может быть добавлена. Вместо этого я добавил его с помощью «Добавить существующий элемент» и установил

  • Build Action = Content
  • COM Register = Register
  • Copy to Output Directory = Copy, если новее

Возможно, я тоже помещаю эту DLL в неправильное место ...

Вот мой код в C ++ DLL

mydll.h

#ifndef MYDLL_H
#define MYDLL_H

#ifdef MYDLL_EXPORTS
   #define MYDLL_API __declspec(dllexport)
#else
   #define MYDLL_API __declspec(dllimport)
#endif

MYDLL_API int __stdcall sendRequest();

#endif

mydll. cpp

#include "stdafx.h"
#include "mydll.h"
#include <windows.h>

#pragma once

BOOL APIENTRY DllMain( HANDLE hModule,
      DWORD ul_reason_for_call,
      LPVOID preserved
      )
{
  switch(ul_reason_for_call)
  {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
       break;
  }

  return TRUE
}

MYDLL_API int __stdcall sendRequest(){
   //there is code here but it's not really relevant to the problem
}

в mydll.def

LIBRARY MYDLL

EXPORTS
    sendRequest

и в проекте VB

//other imports
Imports System.Runtime.InteropServices

//OtherCode
//Within a class
<DllImport("mydll.dll", CharSet:=CharSet.Auto)> _
Private Shared Function sendRequest() As Int32
End Function

//Within a function within the same class

int j = sendRequest()
...