Смешивание управляемого класса / типов с неуправляемым LNK2028: неразрешенный токен

Здравствуйте! Я пытаюсь создать форму, которая позволяет пользователю щелкнуть в графическом окне, чтобы импортировать изображение в графическое окно среди других функций. Проблема заключается в импорте, один из членов моей команды сделал код для импорта, но мы не можем заставить его работать со смешанным управляемым и неуправляемым кодом. Никто из нас не знает ничего об управляемом коде или неуправляемом коде, входящем в этот проект, поэтому мы не знаем, как заставить работать следующее.

Ниже у нас есть два метода: один для преобразования WChar в строку, другой открывает окно браузера для выбора изображения. Последние используют класс рисунка, который содержит несколько переменных, таких как путь и имя. Класс рисунков работает в других функциях и не может быть изменен. Аналогичная версия GetLogo () работает, когда не в визуальной студии (без изменений).

#pragma unmanaged
#include <windows.h>
#include <iostream>
#include <fstream>
#include <string>
#include <list>
#include <iomanip>
using namespace std;

#pragma managed
#include "Picture.h"#include <list>
#using<system.dll>
using namespace System;
using namespace System::IO;
using namespace System::Collections::Generic;

static string importFiles = "Import Pictures";
static wstring importLogo = L"Import Logo";System::String^ convertWCharToString(wchar_t buffer[])
{
// Convert the wchar_t string to a char* string. Record
//.the length of the original string and add 1 to it to
//.account for the terminating null character.
size_t origsize = wcslen(buffer) + 1;
size_t convertedChars = 0;

// Allocate two bytes in the multibyte output string for every wide
// character in the input string (including a wide character
// null). Because a multibyte character can be one or two bytes,
// you should allot two bytes for each character. Having extra
// space for the new string is not an error, but having
// insufficient space is a potential security problem.
const size_t newsize = origsize*2;
// The new string will contain a converted copy of the original
// string plus the type of string appended to it.
char *nstring = new char[newsize];

// Put a copy of the converted string into nstring
wcstombs_s(&convertedChars, nstring, newsize, buffer, _TRUNCATE);String^ strBuf = gcnew System::String(nstring) ;

return strBuf;
}Picture^ GetLogo()
{
const int BUFSIZE = 1024;
wchar_t buffer[BUFSIZE] = {0};

//Define attributes of the OPEN FILE NAME
OPENFILENAME ofns = {0};
ofns.lStructSize = sizeof( ofns );
ofns.lpstrFile = buffer;
ofns.nMaxFile = BUFSIZE;
ofns.lpstrTitle = importLogo.c_str();
ofns.Flags = OFN_EXPLORER |
OFN_ENABLESIZING;
GetOpenFileName( & ofns );

wchar_t szFiles[1024], szFileTok[260];
wchar_t szDir[1024];

Picture^ file;

wchar_t *p;
lstrcpy(szFiles, buffer);
lstrcpy(szDir, buffer);

p = buffer;

p += lstrlen(p) + 1;

convertWCharToString(buffer);

String^ strBuf = gcnew System::String(buffer) ;
String^ strDir = gcnew System::String(szDir) ;

file = gcnew Picture(strBuf, strDir, false);

return file;
}

Picture.h

#pragma once
//This is used to hold the name of the picture, the path to it, and if it is picked in the viewer
#include <string>

ref class Picture
{
public:
Picture(){};  //default constructor

Picture(System::String^ newName, System::String^ newPath, bool newPicked)
{
strName = newName;
strPath = newPath;
boolPicked = newPicked;
}

void setName(System::String^ newName)
{
strName = newName;
}

void setPath(System::String^ newPath)
{
strPath = newPath;
}void setPicked(bool newPicked)
{
boolPicked = newPicked;
}

System::String^ getName()
{
return strName;
}
System::String^ getPath()
{
return strPath;
}
bool getPicked()
{
return boolPicked;
}

private:
System::String^ strName;
System::String^ strPath;
bool boolPicked;
};

#pragma endregion

Ниже приведен пример вызова функции getLogo

private: System::Void pictureBox1_Click(System::Object^  sender, System::EventArgs^  e) {
Picture^ newLogo = GetLogo();
logoPictureBox->Image = dynamic_cast<Bitmap^> (Image::FromFile(newLogo->getPath(), true));
}

Ниже приведена текущая ошибка:

error LNK2028: unresolved token (0A000531) "extern "C" int __stdcall GetOpenFileNameW(struct tagOFNW *)" (?GetOpenFileNameW@@$$J14YGHPAUtagOFNW@@@Z) referenced in function "class Picture ^ __clrcall GetLogo(void)" (?GetLogo@@$$FYMP$AAVPicture@@XZ)

Если вам нужно больше кода, пожалуйста, дайте мне знать.
Спасибо за ваше время.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]