2014-03-04 40 views
0

我在調用Oracle Forms 6i中DLL的方法時遇到了很大的問題。 DLL已經寫在從Oracle Forms中的DLL(c#)調用函數

C#,這是代碼:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using OnlineFPCommon; 
using System.Windows.Forms; 

namespace TestNamespace 
{ 
    public class TestClass 
    { 
     public static void testMethod() 
     { 
      MessageBox.Show("testMethod"); 
     } 
    } 
} 

我嘗試使用Oracle表單代碼來調用它:

testlib_lhandle := Ora_Ffi.Load_library('C:\libdir\','test.dll'); 
getresult_fhandle := ora_ffi.register_function(testlib_lhandle,'testMethod'); 

但第二行,當我嘗試註冊功能失敗。爲什麼?我如何正確調用該函數?

回答

1

register_function需要一個dll入口點,並且您不能在託管代碼中生成該入口點。

您可以編寫一個C++/CLi包裝器DLL來爲您的託管代碼提供原生入口點,但是如果您只是從頭開始,那麼爲什麼不直接寫一個純原生dll。

+0

好的,我改變了調用c#dll的方式。 我用C++ DLL來做。 總結: 1.)從Oracle Forms中,我使用C++編寫的DLL調用函數。 2.)來自C++ DLL的函數從c#DLL中調用函數。 3.)現在我的oracle形成應用程序崩潰。 嗯,這是非常奇怪的,因爲我嘗試使用相同的C++應用程序,而不是Oracle Forms,它的工作原理。那麼,什麼可能是一個問題,它不適用於Oracle Forms 6? – jrola

+0

嘗試用您的oracle進程調試dll作爲調試目標。 –