2016-08-17 16 views
2

EDIT : 마침내 "Hello, World!"를 만들 수있었습니다. 프로젝트 집합. Error #3500 문제가있는 경우 작업중인 프로젝트 세트에 대해서는 my answer below을 참조하십시오.Adobe AIR : 오류 # 3500

현재 "Hello, World!" FlashDevelop을 사용하는 Adobe AIR의 네이티브 확장. My Native Extension은 프로그래밍중인 Windows-x86 플랫폼에서 사용하기위한 것입니다.

(사용자 지정) 배치 파일을 통해 ANE를 작성했습니다. 그 ANE를 사용하는 테스트 AIR 응용 프로그램은 괜찮 았지만 컴파일 된 게시물을 본 많은 다른 사람들처럼 Error #3500: The extension context does not have a method with the name helloWorld.

나는 지금 3 일 동안 무슨 일이 있었는지 이해하려고 노력해 왔습니다. 몇 가지 원인을 수정 했음에도 불구하고 여전히 동일한 오류가 발생합니다.

내 초기 설정자가 OutputDebugString(L"Extension initialized");을 사용하더라도 DebugView가 아무 것도 추적하지 않기 때문에 응용 프로그램 런타임에서 실제로 initializeExtension 함수를 호출하지 않습니다.

많은 코드를 게시하는 데 약간의 어려움이 있지만 3 일 후 수십 개의 웹 페이지를 읽은 후에는 내 문제가 어디서 오는지 확실하지 않습니다.

어쨌든, 응용 프로그램 건물은 3 단계로 수행됩니다

1)이 릴리스 플래그 Visual Studio에서 DLL을 구축. 그 코드는 아래 Michael의 의견에 대한 응답으로 게시하고 있습니다. 그러나 오류가 거기에서 오는 것인지 확신 할 수 없습니다. 내 기본면이 주로 헤더와 C++ 파일로 구성되어 있습니다

: 여기

// ------------------------- 
// | NativeExtensionTest.h | 
// ------------------------- 

#pragma once 

#include "FlashRuntimeExtensions.h" 

#ifdef __cplusplus 
EXTERN_C 
{ 
#endif 

    __declspec(dllexport) void initializeExtension(
    void** dataToSet, 
    FREContextInitializer* contextInitializer, 
    FREContextFinalizer* contextFinalizer 
    ); 


    __declspec(dllexport) void finalizeExtension(
     void* extData 
     ); 


    __declspec(dllexport) void initializeContext(
     void* contextData, 
     const uint8_t* contextType, 
     FREContext context, 
     uint32_t* nFunctionsToSet, 
     const FRENamedFunction** functionsToSet 
     ); 


    __declspec(dllexport) void finalizeContext(
     FREContext context 
     ); 


    __declspec(dllexport) FREObject helloWorld(
     FREContext context, 
     void* functionData, 
     uint32_t argc, 
     FREObject argv[] 
     ); 

#ifdef __cplusplus 
} 
#endif 

그리고이 기능의 구현 : alebianco 요청으로

// ------------------ 
// | HelloWorld.cpp | 
// ------------------ 

#pragma once 

#include "stdafx.h" // precompiled header ; includes cstdlib, cstring and windows.h 
#include "FlashRuntimeExtensions.h" 
#include "NativeExtensionTest.h" 


using namespace std; 


void initializeExtension(
void** dataToSet, 
FREContextInitializer* contextInitializer, 
FREContextFinalizer* contextFinalizer 
) 
{ 
    dataToSet = NULL; 
    *contextInitializer = &initializeContext; 
    *contextFinalizer = &finalizeExtension; 
} 



void finalizeExtension(
    void* extData 
    ) 
{ } 



void initializeContext(
    void* contextData, 
    const uint8_t* contextType, 
    FREContext context, 
    uint32_t* nFunctionsToSet, 
    const FRENamedFunction** functionsToSet 
    ) 
{ 
    *nFunctionsToSet = 1; 
    FRENamedFunction* functions = (FRENamedFunction*)malloc(sizeof(FRENamedFunction)* (*nFunctionsToSet)); 

    functions[0].name = (const uint8_t*)"helloWorld"; 
    functions[0].function = &helloWorld; 
    functions[0].functionData = NULL; 

    *functionsToSet = functions; 
} 


void finalizeContext(
    FREContext context 
    ) 
{ } 


FREObject helloWorld(
    FREContext context, 
    void* functionData, 
    uint32_t argc, 
    FREObject argv[] 
    ) 
{ 
    char* hello = "Hello, World!"; 
    unsigned int helloLength = strlen(hello) + 1; 
    FREObject ret; 

    FRENewObjectFromUTF8(helloLength, (const uint8_t*)hello, &ret); 

    return ret; 
} 

, here is the build log을 만들 때 DLL. 사용자 지정 빌드 배치 파일의 실행이 끝날 때 로그 끝 부분에 오류가 있음에 유의하십시오. 나는이 오류가 어디서 오는지 알지 못한다. 지난 번에 그 프로젝트를 만들 때 그 실수가 없었습니다. 게다가, 아마 FlashDevelop의 내부 일 것입니다.

2) ANE 빌드. 배치 파일을 사용하여 다음 명령을 실행하고 있습니다.

SWC를 빌드하려면 compc을 호출합니다. 변수 확장 한 후에는 다음과 같습니다 : I 추출하는 (내 비주얼 스튜디오 폴더와 library.swf에서 DLL을 모두 복사 한 후 차례로

package 
{ 
    import flash.events.EventDispatcher; 
    import flash.external.ExtensionContext; 


    public class NativeExtHelloWorld extends EventDispatcher { 

     private var extContext:ExtensionContext; 

     public function NativeExtHelloWorld() 
     { 
      extContext = ExtensionContext.createExtensionContext("NativeExtHelloWorld", "helloWorldContext"); 
     } 

     public function helloWorld() : String 
     { 
      return String(extContext.call("helloWorld")); 
     } 

    } 

} 

:

compc -include-sources"C:\Users\Anthony Dentinger\Desktop\Native Extension Test\src" -output "C:\Users\Anthony Dentinger\Desktop\Native Extension Test\ANE Build Files\NativeExtHelloWorld.swc" -load-config "C:\Users\Anthony Dentinger\AppData\Local\FlashDevelop\Apps\flexsdk\4.6.0\frameworks\air-config.xml" -swf-version 14 

src 폴더 간단한 클래스를 포함 SWC에서) ANE Build Files\platforms\Windows-x86으로, 나는 adt와 함께 ANE를 빌드합니다.가변 전개 후, 명령은 다음과 같다 : 실제 애플리케이션 구현

<?xml version="1.0" encoding="utf-8"?> 
<extension xmlns="http://ns.adobe.com/air/extension/3.1"> 

    <id>NativeExtHelloWorld</id> <!--I'll later change that ID to something like com.example.myExt.HelloWorld--> 
    <name>Exension Name</name> 
    <description>Description of the Extension</description> 
    <versionNumber>0.0.1</versionNumber> 
    <copyright>© 2010, Examples, Inc. All rights reserved.</copyright> 

    <platforms> 
     <platform name="Windows-x86"> 
      <applicationDeployment> 
       <nativeLibrary>HelloWorld.dll</nativeLibrary> 
       <initializer>initializeExtension</initializer> 
       <finalizer>finalizeExtension</finalizer> 
      </applicationDeployment> 
     </platform> 
    </platforms> 

</extension> 

3) :

call adt -package -target ane "C:\Users\Anthony Dentinger\Desktop\Native Extension Test\ANE Build Files\HelloExtension.ane" "C:\Users\Anthony Dentinger\Desktop\Native Extension Test\ANE Build Files\descriptor.xml" -swc "C:\Users\Anthony Dentinger\Desktop\Native Extension Test\ANE Build Files\NativeExtHelloWorld.swc" -platform "Windows-x86" -C "C:\Users\Anthony Dentinger\Desktop\Native Extension Test\ANE Build Files\platforms\Windows-x86" . 

여기서 I는 ADT를 제공하는 확장 디스크립터이다. AIR AS3 프로젝터를 빌드하기 위해 FlashDevelop에서 만든 기본 배치 파일 (ANE를 두 가지 수정하여)을 사용하고 있습니다.

오류 # 3500이 발생하면 생성자가 작동 중이므로 내 응용 프로그램에 ANE 클래스가 성공적으로 포함되었다는 것을 의미합니다.

유용 할 경우에 대비하여 사용중인 응용 프로그램 설명자입니다.

<?xml version="1.0" encoding="utf-8" ?> 
<application xmlns="http://ns.adobe.com/air/application/15.0"> 

    <id>TEST</id> 
    <versionNumber>1.0</versionNumber> 
    <filename>TEST</filename> 
    <name>TEST</name> 

    <initialWindow> 
     <title>TEST</title> 
     <content>TEST.swf</content> 
     <systemChrome>standard</systemChrome> 
     <transparent>false</transparent> 
     <visible>true</visible> 
     <minimizable>true</minimizable> 
     <maximizable>true</maximizable> 
     <resizable>true</resizable> 
    </initialWindow> 

    <supportedProfiles>extendedDesktop</supportedProfiles> 

    <extensions> 
     <extensionID>NativeExtHelloWorld</extensionID> 
    </extensions> 
</application> 

AIR SDK (22.0.0)와 병합 된 Flex (4.6.0)를 사용하고 있습니다.

내가 잘못 했나요? 이 문제를 해결하는 데 도움이되는 것은 무엇입니까?

다시 한번 말씀 드리지만, 저는 매우 유익한 코드를 게시했습니다. 가장 관련성이 높은 것으로 트리밍을 시도했습니다.

미리 감사드립니다.

+0

안녕하세요, 그 오류는 일반적으로 당신이 메서드를 선언하지 않은 네이티브 코드에 문제가 있음을 나타냅니다. 네이티브 측에서 확장 컨텍스트의 초기화 코드를 게시 할 수 있습니까? – Michael

+0

@Michael 요청하신대로 기본 코드를 추가했습니다. –

+1

ANE 코드가 완전히 잘못 되었더라도 ANE 내에서 무언가를 호출하지 않으면 컴파일 오류가 발생하지 않습니다. 익스텐션의 actionscript 부분이 C++ 코드에서 helloWorld 함수를 찾을 수없는 것 같습니다. C++에 대해서는 잘 모르지만 initializeContext에서하는 함수 선언에 문제가있는 것 같아요.어쩌면 함수들 [0] .name = (const uint8_t *) "helloWorld"; 부분이 잘못 됐어? – Philarmon

답변

1

나는 어떻게 든 문제를 해결했으며 모든 것이 작동합니다. 나는 내가 잘못하고있는 것을보기 위해 되돌아 가려고했지만, 나는 그것을 알아낼 수 없다. 내 추측은 ANE가 잘못된 대상을 사용하고 있었기 때문에 복사 및 압축 해제하는 배치 파일 중 하나입니다. 따라서 이전의 ANE를 사용하는 대신 ANE를 사용하는 대신 바보 같은 것을 사용했습니다.

Colonize.bat의 요청에 따라 here is a working Hello, World! example 나는 이것을 만들기 위해 VisualStudio 2013과 FlashDevelop를 사용했다. 내가 읽었던 다른 오류

  • 1_Build_DLL/Hello World/main.cpp
  • 2_Build_ANE/lib/descriptor.xml
  • 2_Build_ANE/src/HelloWorldExtension.as

원인 (또는 :

다음과 같은 파일에 여러 오류 # 3500 원인을 찾을 수 있습니다 발생했습니다!) 다른 파일에도 나와 있습니다. 사실 사용자 지정 배치 파일은 자신의 ANE를 만들고 사용하기 위해 따라야 할 절차를 나타냅니다.

참고 :이 파일에서 직접 빌드하지 마십시오. 명령을 실행하고 파일을 수동으로 복사/붙여 넣기/압축 해제 할 필요가 없도록 배치 파일을 사용하고 있으므로 대상 및 환경 변수가 컴퓨터에서 유효하지 않습니다.

+0

다른 사람들이 체크 아웃 할 수 있도록 해당 프로젝트의 덤프를 제공 할 수 있다고 생각하십니까? 저는 현재 # 3500 오류를 알아 내고있는 날 4에 있고, 왜, 어디서 아주 많이 붙어 있습니다. –

+1

@ Colonize.bat 예, 성가신 것 아닙니까? 물론, 나는 그것을 할 수있다. 그러나 프로젝트를 처음부터 만들었 기 때문에 여러 개의 반 작업 파일이 있습니다. 며칠 줘, 내가 일하는 프로젝트를 업로드 할거야. –

+1

@ Colonize.bat 지연을 드려 죄송합니다. 나는 지난 며칠간 바빴다. 위의 대답의 링크에서 작동하는 프로젝트 세트를 찾을 수 있습니다. –