1. FAQ
  2. 엑셀(Excel)
  3. AfterEffects
  4. Premiere
  5. Photoshop
  6. ETC

이 게시판은 아별닷컴 회원만 질문을 올릴 수 있습니다. 회원에게 주어지는 특권인셈이지요. 회원이 아닌 분들은 열람만 가능합니다.

Excel에서 DLL Load

VBA 조회 수 2814 추천 수 0 2012.10.23 18:09:42

안녕하세요? 아별님

이틀내내 인터넷에 찾아보고 해도 문제를 풀지 못해 부탁 드립니다.

 

Excel에서 DLL을 실행시키기 위해 아래와 같은 아주 간단한 VC 2008로 MyDllAny.dll을 만들고 그 결과를 메세지창에 띄우려고 합니다.

그런데 계속 에러가 나서 염치 불구하고 어디가 잘못 되었는지 부탁드립니다.

이 사이트에 예제파일은 잘 작동이 되던데 제가 만든것은  DLL호출규정이 잘못되었다는 메세지가 나옵니다.

 

VB로 실행파일을 만들어 테스트하면 잘 되는데 Excel 파일에서 Load하면 안되는군요.

번거러우시겠지만 어디가 문제가 되는지 알려주시면 감사하겠습니다.

 

OS : Windows 7 64 Bit

Excel : Excel 2007 32 Bit

C Compiler : Visual C 2008 // DLL 파일 컴파일

 

VB : Visual Studio 2008 // 단지 Test용으로 실행파일 만든 용도며  실제 관련없음.

 

// C DLL 프로그램  내용

 

/* 직접 익스포트하기 */
extern "C" __declspec(dllexport) int AddInteger(int a, int b)
{
      return a+b;
}
//*/

//* 헤더 파일로 익스포트하기
#define DLLEXPORT
#include "MyDll.h"

extern "C" MYDLLTYPE int AddInteger(int a, int b)
{
     return a+b;
}
//*/

 

***** REM Excel module
#If Win64 Then
    Private Declare PtrSafe Function AddInteger Lib "D:\Test\MyDll64.dll" (ByVal a As integer, ByVal b As Integer) As IntPtr
#Else
    Public Declare Function AddInteger Lib "D:\Test\MyDllAny.dll" (ByVal A As Integer, ByVal B As Integer) As Integer
#End If

Sub ButtonClick()
    Dim A As Integer
    Dim B As Integer
    Dim Result As Integer
   
    Result = 100    
    Result = AddInteger(A, B)
    MsgBox Str(Result)    
End Sub

 

Visual Basic 부분

**** REM Visual Basic에서는 실행이 잘됩니다. 첨부파일 중 실행파일로 만든것

Public Class Form1
    REM Attribute VB_Name = "Module1"
    Declare Function AddInteger Lib "MyDllAny.dll" (ByVal A As Integer, ByVal B As Integer) As Integer

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Result As Integer
        Result = AddInteger(3, 4)
        Me.Label1.Text = "3+4=" + Str(Result)
    End Sub
End Class


댓글 '2'

[레벨:1]와룡

2012.10.24 10:51:28
*.75.253.250

문제해결

1. Windows 7 64Bit Office 2010 64 Bit

 1). function return value 및 parameter가 integer로 되어 있는데 이것을 Long으로 바꿈(Excel에서).  //

#If Win64 Then
    Private Declare PtrSafe Function AddInteger Lib "D:/Test/MyDll32.dll" (ByVal a As Long, ByVal b As Long) As Long
#Else
    Private Declare Function AddInteger Lib "D:/Test/MyDll32.dll" (ByVal a As Long, ByVal b As Long) As Long
#End If

 

2. Windows 7 64Bit Office 2007 32 Bit

 1) C에서 DLL 파일을 만들때 def 파일을 이용해서 만들것

 Ex) MyDll32.def

LIBRARY "MyDll32"

EXPORTS

AddInteger @1

 

VC, VB로 만든 실행파일과 Excel2010으로서 동일한 dll 파일을 loading하는것은 전혀 문제가 없었으나 Excel 2007에서는 문제가 발생,

따라서 dll 파일을 만들때 함수 export부분을 구 방식으로 만들어야 합니다.

profile

[레벨:30]아별

2012.10.29 15:50:14
*.104.126.21

헐.. 해보진 않았지만.. 님 좀 짱이신듯..? ㅎㅎ

처음에 언뜻 보고서.. CAS(Code Access Security)문제가 아닐까했었는데..


저도 요즘 VSTO 개발을 공부하고 있기는 한데.. 배포가 가장 어려운것 같습니다.

자동 업데이트도 안되고.. 원클릭으로 MSI가 아닌 설치파일(.exe)로 만들어서 배포하는걸 해보고 싶은데..

쉽지 않네요.. +_+;;


VSTO 강좌 게시판 하나 만들어드릴까요? ^_^;;


문서 첨부 제한 : 0Byte/ 2.00MB
파일 제한 크기 : 2.00MB (허용 확장자 : *.*)
List of Articles
번호 제목 글쓴이 날짜 조회 수sort
공지 공지 [공지] 아별닷컴의 엑셀 질문방 폐쇄합니다. 카페 질문방 이용하세요.. imagefile [레벨:30]아별 2015-04-23 42549
821 엑셀일반 엑셀파일 비밀번호 단체 설정 가능한가요? [30] [레벨:4]쟈니 2012-06-18 54102
820 엑셀일반 회원만 질문을 올릴 수 있습니다. [레벨:30]아별 2010-09-21 33263
819 기타 [필독] 질문시.. 엑셀 파일 첨부, 윈도우버전과 엑셀버전 표기, 답변 받으면 피드백 댓글 꼭 달기.. [레벨:30]아별 2011-08-11 26802
818 엑셀일반 행높이 최대치 조절 가능할까요? _ Excel 사양 및 제한 [3] [레벨:6]파이스 2012-06-01 14798
817 엑셀 웹커리에서 URL 바꾸기 매크로 질문 [1] [레벨:1]밥사마 2009-09-01 13376
816 엑셀- sumif와 sumcol 혼용사용에 대해서 (급해요) [1] 아놔 2009-07-31 12988
815 엑셀일반 엑셀에서 사진 고정하는 방법 없을까요? [3] [레벨:3]빛의행운아 2012-07-30 12659
814 제가 해외 사우디에서 파일을 받았는데 글씨가 계속 깨짐니다. file [1] [레벨:0]홍콩중국홍콩 2010-05-10 10944
813 또 다시 질문이 있어서 왔습니다. (일자별 관리시트에서 이전 시트 값(전일 잔액 등) 자동 불러오기) file [1] [레벨:3]harcz 2010-05-22 10902
812 엑셀수식 3차 방정식 풀기. [1] [레벨:3]rynoel 2012-06-13 10892
811 엑셀에서 지수값 계산하기 [1] [레벨:2]양다원 2009-07-21 10453
810 셀색깔별로 합계를 내고 싶습니다. file [1] [레벨:1]지민 2010-04-09 10442
809 엑셀에서 복사할 때 행 및 열넓이까지 그대로 복사하는 방법 [7] [레벨:2]만쥬 2010-12-07 10228
808 엑셀일반 셀 안에 삽입된 이미지의 정가운데(가로+세로)정렬 방법이 궁금합니다. [6] [레벨:6]파이스 2011-10-11 10077
807 VBA 엑셀 열 추가 _ 엑셀의 마지막 셀 재 인식시키는 팁 ActiveSheet.UsedRange.Select imagefile [1] [레벨:5]눈물바다 2009-08-27 10070
806 엑셀 주식형 차트 2009-08-17 9977
805 엑셀에서 특정데이터 불러오기 [1] [레벨:1]쒸뱅이 2009-07-17 9928
804 피벗테이블 피벗테이블에서 (비어있음)을 보이지 않게 할 수 있나요? file [레벨:1]농구경제박사 2016-02-25 9766
803 두 자료를 비교하여 같은 값을 다른 시트에... file [1] [레벨:1]프로도 2010-05-11 9756