PDA

View Full Version : فراخوانی OpenFileDialog در DLL



Takeitall
پنج شنبه 26 فروردین 1395, 13:57 عصر
سلام من یه پروژه ساختم با این مشخصات

VC++‎‎‎‎‎‎‎‎ 2013, Win32 Project, DLL, Empty بدون MFC و ATL

حالا قصد دارم که در فایل DLL خودم فایل دیالوگ ها را فراخوانی کنم. سرچی که کردم OPENFILENAMEA رو پیدا کردم ولی پیغام خطای LNK2019 و LNK1120 میده
لطفا راهنمایی کنید چطور میتونم فایل دیالوگ ها را در C++‎‎ DLL اجرا کنم.


#include "stdafx.h"
#include <windows.h>
#include "resource.h"
#include <Commdlg.h>

int openfilename()

{
OPENFILENAME ofn;
// a another memory buffer to contain the file name
char szFile[100];

// open a file name
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = NULL;
ofn.lpstrFile = szFile;
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
GetOpenFileName(&ofn);

// Now simpley display the file name
MessageBox(NULL, ofn.lpstrFile, "File Name", MB_OK);
return 0;
}

ciavosh
پنج شنبه 26 فروردین 1395, 17:23 عصر
لطفا خطاها رو به طور کامل بذارید. احتمالا شما لیب‌های لازم رو به لینکر ندادید.

Takeitall
جمعه 27 فروردین 1395, 02:12 صبح
لطفا خطاها رو به طور کامل بذارید. احتمالا شما لیب‌های لازم رو به لینکر ندادید.

عکس رو ضمیمه کردم دقیقا فکر میکنم به این خاطر باشه ولی واقعا نمیدونم چه پیش نیاز هایی میخواد.

ciavosh
جمعه 27 فروردین 1395, 05:27 صبح
وقتی یک پروژه معمولی درست می‌کنیم محیط چندین لیب پر استفاده رو به لینکر میده. این لیبها دو نوع هستند اونایی که به صورت استاتیک درون فایل اجرایی قرار میگیرند و اونایی که کمک میکنن فایل اجرایی از یک دی ال ال استفاده کنه. احتمالا وقتی پروژه دی ال ال باشه این اتفاق نمی‌افته. شما باید بدونی برای هدرهایی که اینکلود میکنی چه لیبهایی مورد نیازه و اونها رو در تنظیمات لینک پروژه اضافه کنی.در MSDN ذکر شده هر هدر چه لیبی نیاز داره.

AliAskari1375
جمعه 27 فروردین 1395, 06:16 صبح
از منوی ویژوال استودیو Project و بعد proj Propert رو انتخاب کن (به جای proj اسم پروژه نوشته اصلیه. مال شما فک کنم Functions Properties باشه)
یه پنجره باز میشه

توی این پنجره از کادر سمت چپ اول Configuration Properties رو کلیک کن تا باز شه. بعد Linker رو باز کن و گزینه Input رو انتخاب کن
حالا توی کادر سمت راست پنجره Additional Dependencies رو انتخاب کن. یه فلش کوچیک رو به پایین سمت راستش نشون داده میشه. روش کلیک کن و بعد هم روی Edit

دوباره یه دیالوگ باز میشه که پایینش یه چک باکس به نام Inherit from parent or project defaults هست. اگر تیک نداشت تیکشو بذارو OK کن و توی پنجره قبلیه Apply رو بزن

Takeitall
جمعه 27 فروردین 1395, 08:59 صبح
وقتی یک پروژه معمولی درست می‌کنیم محیط چندین لیب پر استفاده رو به لینکر میده. این لیبها دو نوع هستند اونایی که به صورت استاتیک درون فایل اجرایی قرار میگیرند و اونایی که کمک میکنن فایل اجرایی از یک دی ال ال استفاده کنه. احتمالا وقتی پروژه دی ال ال باشه این اتفاق نمی‌افته. شما باید بدونی برای هدرهایی که اینکلود میکنی چه لیبهایی مورد نیازه و اونها رو در تنظیمات لینک پروژه اضافه کنی.در MSDN ذکر شده هر هدر چه لیبی نیاز داره.


از منوی ویژوال استودیو Project و بعد proj Propert رو انتخاب کن (به جای proj اسم پروژه نوشته اصلیه. مال شما فک کنم Functions Properties باشه)
یه پنجره باز میشه


ممنون AliAskari1375 و ciavosh
مشکل با فعال کردن گزینه Inherit from parent or project defaults حل شد