2012-03-26 23 views
0

Visual C++ express 2008でDLLを作成しようとしています。私のDLL proyectはうまくコンパイルされ、* .dllが作成されます。しかし、regsvr32に登録しようとすると、次のエラーメッセージが表示されます。regsvr32を使用しているときにWindows DLLにエントリポイントが見つかりません

"name.dllモジュールがロードされましたが、エントリponintが見つかりませんでした.DllUnregisterServer"(メッセージは、私のスペイン語バージョンのWindowsから翻訳しています)。

私はWindows 7 64ビットO.Sを使用しています。

DLL.h

#ifndef DLLHEADER_H_INCLUDED 
#define DLLHEADER_H_INCLUDED 

#ifdef DLL_EXPORTS 
#define DLL_API __declspec(dllexport) 
#else 
#define DLL_API __declspec(dllimport) 
#endif 

extern "C" 
{ 
struct DLL_API Datos 
{ 
    char cad1[100]; 
    char cad2[100]; 
    char cad3[100]; 
}; 

DLL_API void __stdcall funcion(char*); 
DLL_API void __stdcall saludo(void); 
} 

#endif 

DLL.cpp

:しかし、私は彼女がコードです

... * .dllは理由のVisual C++ Expressが私のバージョンの32ビットで作成されたと思います

#include "stdafx.h" 
#include "DLL.h" 

void __stdcall funcion(char* ptr) 
{ 
Datos* d = (Datos*)ptr; 

std::cout<<"DESDE LA DLL : \n"; 
std::cout<<"Cadena1 : "<<d->cad1<<'\n'; 
std::cout<<"Cadena1 : "<<d->cad2<<'\n'; 
std::cout<<"Cadena1 : "<<d->cad3<<'\n'; 
} 

void _stdcall saludo(void) 
{ 
std::cout<<"Hola desde DLL.\n"; 
} 

私はMSDNのチュートリアル次のproyectを作成したテンプレートもこのファイルを追加します。

dllmain.cpp

FASとして
// dllmain.cpp : Define el 'entry point' para la aplicación DLL. 
#include "stdafx.h" 

BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) 
{ 
switch (ul_reason_for_call) 
{ 
    case DLL_PROCESS_ATTACH : 
    case DLL_THREAD_ATTACH : 
    case DLL_THREAD_DETACH : 
    case DLL_PROCESS_DETACH : 
          break; 
} 

return TRUE; 
} 

私は理解して、すべてが正常であるが、どうやら私は* .dllファイルを登録することはできません。

何かが欠けていますか?

ありがとうございました。

答えて

2

regsvr32は、ActiveX/COMサーバーでのみ使用されます。あなたのDLLはCOMサーバではないので、最初にあなたのDLLのためにregsvr32を呼び出す必要はありません。なぜなら、登​​録/登録解除するものがないからです。

+0

あなたの答えをありがとう。私は、次の "Regsvr32ツール(regsvr32.exe)を使用してCOM DLLを登録または登録解除するには、msdnオンラインドキュメントを読んでいます。"ですから、この種の「C/C++ DLL」はCOMとは異なりますか? – user1274605

+0

COMは言語ではなく、フレームワークです。 「コンポーネントオブジェクトモデル」(http://msdn.microsoft.com/en-us/library/ms680573.aspxを参照)の略です。あなたが書いたようなプレーンな普通のC/C++ DLLはCOM DLLではありませんが、使用していないATLフレームワークを使ってプレーンC/C++でCOM DLLを書くことができます。最初にDLLを登録しようとしているのはなぜですか?どのような目的のために? –

+0

これは、Progress 4GLアプリケーションで使用されるはずのテスト用DLLであり、Progress開発者は、DLLを使用して登録する必要があると私に言いました。だから私はこの部分もテストしていました。 – user1274605

関連する問題