|
안녕하세요 만해입니다.
솔찍이 이걸 여기다 올려야 할지 c#에다가 올려야 할지 모르겠어요
c# 이랑 , C++ 두군데 다 해당하는 거라서 우선은 여기 사람들이 많이 보니깐 여기 올릴께요 ㅋㅋㅋ~
c# 웹 서비스에서 제가 만들어 놓은 알고리즘에 포함된 DLL에 있는 함수를 불러 와야 하는데요
자꾸 안되네요
DLL NotFound Error 나오는데요
dll 파일 위치도 debug에 넣고, system32에도 넣어 봤는데도 안되네요
혹시 자료형 문제인가 싶어서
Dll 전체 소스하고 호출 하는 부분 소스 올려 드립니다.
좀 봐주세요
DLL 소스 입니다.
//---------------------------------------------------------------------------
#include <windows.h>
#include <vector>
#include <list>
#include <map>
#include <algorithm>
#include <string>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
//---------------------------------------------------------------------------
using namespace std;
//---------------------------------------------------------------------------
static map<int,int> InclinationRateMap;
static list<int> InclinationList;
static int RefCount=0;
static FILE * fp;
//---------------------------------------------------------------------------
struct InclinationRate_
{
int InclinationCode_;
int Count_;
double Rate_;
InclinationRate_(int InclianationCode_, int Count_, double Rate_):
InclinationCode_(0),Count_(0),Rate_(0.0){};
};
//---------------------------------------------------------------------------
struct FindInclination : public unary_function<string , int >
{
int operator() ( string ) const
{
int InclinationCode =0;
InclinationCode = random(10);//FindInlcinationCode(url);
InclinationRateMap[InclinationCode]++;
InclinationList.push_back(InclinationCode);
return InclinationCode;
}
};
//---------------------------------------------------------------------------
extern "C" __declspec(dllexport) void
InclinationAnalysis ( vector<string> NavigationList )
{
string log;
log.assign("Now In inclination Analysis");
fwrite((void*)log.data(),log.size(),1,fp);
vector<InclinationRate_> InclinationRateList;
std::list<int>::iterator InclinationList_Itr;
unsigned int UserNavigationListCount=0;
UserNavigationListCount = NavigationList.size();
log.assign("Before Find Inclination");
fwrite((void*)log.data(),log.size(),1,fp);
for_each(NavigationList.begin(),NavigationList.end(),FindInclination());
log.assign("After Find Inclination");
fwrite((void*)log.data(),log.size(),1,fp);
for ( InclinationList_Itr = InclinationList.begin() ;
InclinationList_Itr != InclinationList.end() ; InclinationList_Itr++)
{
InclinationRateList.push_back(
InclinationRate_(*InclinationList_Itr,
InclinationRateMap[*InclinationList_Itr],
(double)InclinationRateMap[*InclinationList_Itr]/
(double)UserNavigationListCount));
}
log.assign("After Inclination Analysis");
fwrite((void*)log.data(),log.size(),1,fp);
// return InclinationRateList ;
}
//---------------------------------------------------------------------------
#pragma argsused
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
if ( fwdreason == DLL_PROCESS_ATTACH )
{
if ( RefCount == 0 )
{
fp = fopen("Log.txt","r+");
fwrite((void*)"Now Attach Process",18,1,fp);
}
RefCount++;
}
if ( fwdreason == DLL_PROCESS_DETACH )
{
RefCount--;
if ( RefCount == 0 )
fclose(fp);
}
return 1;
}
//---------------------------------------------------------------------------
컴파일러는 Borland C++ Builder 6 이고요 DLL 파일 형식은 COFF 입니다.
이걸 호출 하는 부분은 다음과 같습니다.
[DllImport("FindInclinationCode.dll", EntryPoint="_InclinationAnalysis", SetLastError=true,
CharSet=CharSet.Unicode, ExactSpelling=true,
CallingConvention=CallingConvention.StdCall)]
public static extern void InclinationAnalysis(string[] NavigationList);
private void button1_Click(object sender, System.EventArgs e)
{
string[] test = new string[3];
object[] ret = null;
test[0] = "Aaa";
test[1] = "bbb";
test[2] = "ccc";
InclinationAnalysis(test);
}
그리고 DumpBin은 다음과 같이 나옵니다.
Microsoft (R) COFF/PE Dumper Version 7.10.3077
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file FindInclinationCode.dll
File Type: DLL
Section contains the following exports for FindInclinationCode.dll
00000000 characteristics
0 time date stamp Thu Jan 01 09:00:00 1970
0.00 version
1 ordinal base
2 number of functions
2 number of names
ordinal hint RVA name
1 0 00001410 _InclinationAnalysis
2 1 000060F8 ___CPPdebugHook
Summary
1000 .data
1000 .edata
1000 .idata
1000 .reloc
1000 .rsrc
5000 .text
1000 .tls
저 알고리즘은 시샵으로 구현하기 버거워서 씨플플로 구현한건데 결국 C#으로 구현을 해야 하나
고수님들 도움좀 부탁 드려요~
|