2008-09-02 5 views
2

vb.net 2005에서 타사 공급 업체의 C DLL을 호출하려고하는데 P/Invoke 오류가 발생합니다. 나는 성공적으로 다른 방법을 부르고 있지만 더 복잡한 것 중 하나에서 병목을 쳤다. 관련된 구조는 끔찍한 문제를 단순화하기 위해 C++ DLL을 만들어 문제를 복제하고 싶습니다..net에서 호출 할 수있는 매우 간단한 C++ DLL

누군가가 .Net에서 호출 할 수있는 C++ DLL에 대해 가장 작은 코드 스 니펫을 제공 할 수 있습니까? 내 C++ DLL에 "DLL에서 XXX이라는 엔트리 포인트를 찾을 수 없습니다"오류가 발생합니다. 해결하기는 쉽지만 C++ 프로그래머가 아닙니다.

나는 당신의 C++ 함수 선언에 __decspec(dllexport) 마법 요정 먼지를 사용해보십시오

Declare Function Multiply Lib "C:\MyDll\Debug\MyDLL.DLL" Alias "Multiply" (ByVal ParOne As Integer, ByVal byvalParTwo As Integer) As Integer 

답변

2

의 DLL에 대한 .NET 선언을 사용하고 싶습니다. 이 선언은 DLL에서 함수를 성공적으로 내보내는 데 필요한 몇 가지 사항을 설정합니다.

__declspec(dllexport) WINAPI int Multiply(int p1, int p2) 
{ 
    return p1 * p2; 
} 

WINAPI이 같은 VB.NET 같은 언어에서 전화에 적합하도록 규칙을 호출하는 기능을 설정합니다 : 당신은 또한 WINAPI 또는 비슷한을 사용해야 할 수도 있습니다.

0

(DumpBin 또는 Dependency Walker를 통해) 내 보낸 함수를 살펴보고 이름이 잘리지 않는지 확인할 수 있습니다.

0

그렉의 제안을 사용하여 다음 작업을 발견했습니다. 앞서 언급했듯이 저는 C++ 프로그래머가 아니지만 실용적인 것을 필요로했습니다.

MyClass.cpp를 사용법 #include "stdafx.h를"

BOOL APIENTRY DllMain(HANDLE hModule, 
         DWORD ul_reason_for_call, 
         LPVOID lpReserved 
       ) 
{ 
    return TRUE; 
} 

int _stdcall multiply(int x , int y) 
{ 
    return x*y; 
} 

myclass.def LIBRARY MyClass에

EXPORTS 

multiply @1 

stdafx.cpp 사용법 #include "stdafx. h "

에 stdafx.h

// stdafx.h : include file for standard system include files, 
// or project specific include files that are used frequently, but 
//  are changed infrequently 
// 

#if !defined(AFX_STDAFX_H__5DB9057C_BAE6_48D8_8E38_464F6CB80026__INCLUDED_) 
#define AFX_STDAFX_H__5DB9057C_BAE6_48D8_8E38_464F6CB80026__INCLUDED_ 

#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 


// Insert your headers here 
#define WIN32_LEAN_AND_MEAN  // Exclude rarely-used stuff from Windows headers 

#include <windows.h> 


//{{AFX_INSERT_LOCATION}} 
// Microsoft Visual C++ will insert additional declarations immediately before the previous line. 

#endif // !defined(AFX_STDAFX_H__5DB9057C_BAE6_48D8_8E38_464F6CB80026__INCLUDED_)