Мне нужна помощь в реализации 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()