2014-10-17 47 views
1

我使用G-WAN 20年4月11日金桂冠API包裝和mono_add_internal_call

INIT.C

#pragma link "mono-2.0" 
#pragma include "/home/igor/Projects/gwan_linux64-bit/mono-3.0.2" 
#include "gwan.h" // G-WAN API 
#include <mono/metadata/metadata.h> 
#include <mono/metadata/loader.h> 
#include <mono/metadata/object.h> 

static MonoString* Sample() 
{ 
    return mono_string_new (mono_domain_get(), "Hello!"); 
} 

int main(int argc, char *argv[]) 
{ 
    mono_add_internal_call("Gwan::Sample", Sample); 
    return 0; 
} 

gwan_api.cs

public class Gwan 
{ 
    [MethodImplAttribute(MethodImplOptions.InternalCall)] 
    extern public static string Sample(); 
} 

金桂冠開始與斷言:

ghashtable.c:236:斷言'hash!= NULL'失敗

比調用腳本後,我遇到了同樣的問題。

Unhandled Exception: System.MissingMethodException: Cannot find the requested method. 
    at (wrapper managed-to-native) Gwan:Sample() 
    at hello2.Main (System.String[] args) [0x00000] in <filename unknown>:0 
[ERROR] FATAL UNHANDLED EXCEPTION: System.MissingMethodException: Cannot find the requested method. 
    at (wrapper managed-to-native) Gwan:Sample() 
    at hello2.Main (System.String[] args) [0x00000] in <filename unknown>:0 

我的感覺是,我沒有配置單聲道的權利,有什麼建議嗎?

回答

1

不像main.c(在維護腳本)的init.c腳本必須終止對G-WAN服務器開始收聽。

由於init.c代碼在執行後被釋放,因此這使得它成爲存儲應該由G-WAN servlet調用的用於爲客戶端請求構建動態內容的持久代碼的可靠選擇。

您可能有更多的機會與main.c或G-WAN連接處理程序。

+1

讓它工作,如我所願,謝謝你的幫助。 – 2014-10-18 21:04:58

+0

有趣的是,看起來像REQUEST,當我在cs servlet裏面時,很多get_env數據都被清除了。爲什麼不在執行後清除它? – 2014-10-18 21:53:52

+0

請求上下文在請求處理完成後(部分)被清除,然後在連接關閉後(而不是在servlet執行時)完全清除。通過檢查servlet中客戶端套接字的值來檢查是否正在訪問「正確的」信息上下文。 – Gil 2014-10-20 15:26:51

-1

您必須爲您希望從C#腳本支持的任何新G-WAN API(或外部函數)實施C#包裝程序。

Gwan C#, how to get HTTP headers?

+0

我需要一個答案 - 我究竟做錯了什麼? – 2014-10-18 10:36:59

+0

從短暫模塊加載持久代碼。感謝'皮特'的快速回復。 – Gil 2014-10-18 12:27:19