以下環境にて、開発者向けのDLL(例えばFFTモジュールのような)を
作成しようとしていますが、ランタイムライブラリの設定で躓いています。
開発環境、条件:
・Win7 64bit, VC++2010
・標準 Windows ライブラリを使用する
・ATLを使用しない
・共通言語ランタイムサポートを使用しない
・ソースコードは配布しない
DLL作成にあたり調査した所、下記(1)(2)の制約があると認識しています。
(1)メモリ確保手段が異なるため、/MD, /MDdの混在はできない。
(例:APP側/MDd, DLL側/MDは不可)
(2)デバッグバージョンのアプリケーションは配布できない。
https://msdn.microsoft.com/en-us/library/8kche8ah(v=vs.100).aspx
DLL使用者がリリースモード(/MD)で開発する分には問題ありませんが、
デバッグモード(/MDd)で開発を進めるような状況も考えられます。
しかしながら(2)の制約により、/MDdでコンパイルしたDLLは配布できません。
何か対処法は無いでしょうか。
ex)
・上記条件を変更すれば、コンパイラオプションによらないDLL作成ができる
・そもそも(1)(2)の解釈がおかしい
・そもそもソースコードがおかしい
等
#情報不足でしたらすみません。補足致します。
以下に最小限のソースを記載します。
DLL.dllをAPP.exeから呼び出す想定です。
DLL.h
lang
1#define WIN32_LEAN_AND_MEAN 2#define DLL_EXPORT __declspec(dllexport) 3 4#include <SDKDDKVer.h> 5#include <windows.h> 6#include <iostream> 7#include <vector> 8 9extern "C" {DLL_EXPORT int DllFunc(std::vector<double>& a);} 10
DLL.cpp
lang
1#include "DLL.h" 2int DllFunc(std::vector<double>& a){ 3 return a[2]; 4}
APP.cpp
lang
1#include "DLL.h" 2#include <stdio.h> 3#include <windows.h> 4 5typedef int (*Func)(std::vector<double>& a); 6 7int main(){ 8 std::vector<double> a(10); 9 for (int i = 0; i < 10; i++) a[i] = i; 10 11 HMODULE hmod = LoadLibraryA("DLL.dll"); 12 if (hmod == NULL) return 1; 13 14 Func func = (Func)GetProcAddress(hmod, "DllFunc"); 15 if (func == NULL) return 2; 16 17 int ret = func(a); 18 19 FreeLibrary(hmod); 20 return 0; 21}

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/04/30 06:34