C#内からC++の自作DLLにダウンロードURLを送り、
ダウンロード完了後、中身のtarファイルを展開するために
動的にTAR32.DLLを読み込んだところdownLoadTestに
Falseが返ってきました。

C++側のみをDLL化せずMFCでテストした時には
testretにTrueが返ってきていてDLLがロードできた事が
確認できたのですが、DLL内から呼んだ時には
DLLのロードに失敗しているようでFalseになります。

同じディレクトリに2つのDLLを置くのではなく、
参照先のようなものを持つ必要があるのでしょうか?

使用しているTar32.DLLは下記から取得しました。
http://www.csdinc.co.jp/archiver/lib/tar32.html

[追記]


フォルダ構成
Assets
|---------Plaugins
|      |------CallDll.cs
|      |------DllHttpDownLoadUntar.dll
|      |------tar32.dll
|
|
|---------Scripts

開発環境
・Windoes7 64bit
・Visual Studio Community 2013


C#側

CallDll.cs

[DllImport("DllHttpDownLoadUntar")]
private static extern bool HttpDwonLoad(string geturl);

public void AddUrl()
{
    bool downLoadTest = false;
    downLoadTest = HttpDwonLoad("http://IPアドレス/Tar/Android.tar");

}  

C++DLL側

DllHttpDownLoadUntar.h

#ifdef DLLHTTPDOWNLOADUNTAR_EXPORTS
#define DLLHTTPDOWNLOADUNTAR_API __declspec(dllexport) 
#else
#define DLLHTTPDOWNLOADUNTAR_API __declspec(dllimport) 
#endif

#include <string>

typedef int (WINAPI *LPUNTAREXTRACTMEM)(const HWND, LPCSTR, LPBYTE, const DWORD, int *, LPWORD, LPDWORD);
LPUNTAREXTRACTMEM lpTarExtractMem = NULL;
HMODULE hTar32 = 0;

extern "C"{
    DLLHTTPDOWNLOADUNTAR_API bool HttpDwonLoad(char* geturl);
    DLLHTTPDOWNLOADUNTAR_API void HttpDownLoadAction(std::string url);
}

DllHttpDownLoadUntar.cpp

#include "stdafx.h"
#include "DllHttpDownLoadUntar.h"
#include "wininet.h"

extern "C"{
// 受け取ったURLのダウンロード
bool HttpDwonLoad(char* geturl){

    HttpDownLoadAction(geturl);

    std::string DllName = "TAR32.DLL";

    size_t origsize = DllName.size() + 1;
    const size_t newsize = 100;
    size_t convertedChars = 0;
    wchar_t wcstring[newsize];
    mbstowcs_s(&convertedChars, wcstring, origsize, DllName.c_str(), _TRUNCATE);

    bool testret = true;
    hTar32 = LoadLibrary(wcstring);

    if (!hTar32) {
        testret = false;
    }
    else
    {
        lpTarExtractMem = (LPUNTAREXTRACTMEM)GetProcAddress(hTar32, "TarExtractMem");
    }

    return testret;
}

void HttpDownLoadAction(std::string url){

        HINTERNET hInet, hUrl;
        char szBuf[128], *lpszSrc;

        DWORD dwRead, dwTotal = 0;  // ファイルサイズ
        HGLOBAL hMem;
        //URLの入力
        //m_edit_url.GetWindowTextA(ss);
        char szUrl[128];
        strcpy_s(szUrl, url.c_str());
        //インターネットの開始
        hInet = InternetOpen((LPCWSTR)"test-program",
            INTERNET_OPEN_TYPE_PRECONFIG,
            NULL, NULL, 0);
        if (hInet == NULL){
            return;
        }

        size_t origsize = url.size() + 1;
        const size_t newsize = 100;
        size_t convertedChars = 0;
        wchar_t wcstring[newsize];
        mbstowcs_s(&convertedChars, wcstring, origsize, szUrl, _TRUNCATE);



        //HTTPセッションの開始、指定のURLオープン
        hUrl = InternetOpenUrl(hInet, wcstring, NULL, 0, 0, 0);
        if (hUrl == NULL){
            return;
        }
        hMem = GlobalAlloc(GHND, 1);
        lpszSrc = (char*)GlobalLock(hMem);
        while (1){
            InternetReadFile(
                hUrl, szBuf, (DWORD)sizeof(szBuf) - 1, &dwRead);
            szBuf[dwRead] = '\0';
            if (dwRead == 0)break;
            dwTotal += dwRead;
            hMem = GlobalReAlloc(hMem, dwTotal + 1, GMEM_MOVEABLE);
            if (hMem == NULL){
                return;
            }
            lpszSrc = (char*)GlobalLock(hMem);
            if (lpszSrc == NULL){
                break;
            }
            strcat_s(lpszSrc, dwTotal + 1, szBuf);
        }
        //メモリの解放
        GlobalUnlock(hMem);
        GlobalFree(hMem);
        //インターネットハンドルの解放
        InternetCloseHandle(hUrl);
        InternetCloseHandle(hInet);
    }
}