C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[37832] [만해]Dll 호출에 대해서 좀 갈켜 주세요~
강재호.만해 [greenuri] 1164 읽음    2004-11-02 03:39
안녕하세요 만해입니다.

솔찍이 이걸 여기다 올려야 할지 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#으로 구현을 해야 하나

고수님들 도움좀 부탁 드려요~

+ -

관련 글 리스트
37832 [만해]Dll 호출에 대해서 좀 갈켜 주세요~ 강재호.만해 1164 2004/11/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.