2011-11-28 23 views
0

我有一個DLL這需要照顧的自定義繪製的一些特殊的玻璃特效。我把它在一個DLL,原因有三:1)所以可以很容易地重新使用和分配過程中的不重其主機應用程序下來,2)這樣我就可以分發到開發商沒有他們知道如何它的工作原理和3)因此它可以從C#中使用。它目前在Delphi中工作,但我知道我需要做很多更改才能支持C#。例如,主DLL函數包含1個參數(一個記錄),其中包含我知道不會在C#中工作的許多類型(如String和TColor)。項目還沒有完全完成,但正在工作。檢查德爾福DLL的安全性,在使用C#

我需要有人指出,最簡單的方法來實現這一點。代碼太大,無法在此發佈,因此here it is at Pastebin

這就是我需要知道:

  • 我應該繼續使用記錄,因爲我,或者用別的東西像盒裝記錄?
  • 任何技巧在這些記錄中使用String或PChar之外的其他技巧?
  • 如何將這個DLL包裝在C#中? (我知道的方式非常小C#)
    • 如何定義等同記錄傳遞給DLL函數?
    • 如何在C#中定義等效常量? (JDGlassCommon.pas的C#版本)
    • 如何獲得畫布句柄(HDC)和父句柄(HWND)發送到DLL?
    • 什麼會等同於TColor?
  • 它是安全的傳遞類型,如TColor的記錄?
  • 你是否預見到我的代碼中有其他問題?

文件列表:

庫:JDGlassLib.dll*

  • 單位:JDGlassCommon.pas *

套餐:JDLib.bpl

  • 單位:JDGlassCommon.pas *
  • 單位:JDGlass.pas *

計劃:JDLibTestApplicationD7。exe文件

  • 形式:JDLibTestAppD7.dfm *
  • 單位:JDLibTestAppD7.pas *

    *=代碼被包括在上述連結

    JDGlassCommon.pas在DLL和組件中共享

應該是這個樣子: Should look like this

注:我不要求重新寫,雖然你比歡迎更多。我只需要一些關於如何解決這個問題的提示。


PS:StackOverflow上的貸記「NGLN」原稿玻璃繪圖代碼回答我的前一個問題:Delphi custom drawing - glowing glass

+0

我希望StackOverflow會強制人們輸入一個解釋評論,當downvoting ... –

回答

1

我應該繼續使用記錄,因爲我,或者用別的 像包裝記錄?

記錄對互操作性很好。不要打包它們,這會讓互操作變得更困難。

這些記錄中的任何技巧使用除String或PChar之外的其他東西嗎 這些記錄?

請勿使用字符串。這只是德爾福,甚至專用於Delphi版本。 PChar適合互操作。有時在記錄中使用固定長度的內聯字符數組可能是最簡單的。這取決於用途。

如何將這個DLL包裝在C#中?

使用p/invoke從C#調用它。

在記錄中傳遞TColor等類型是否安全?

是的,這很容易處理。確保它是一個真正的RGB顏色,而不是像clWindow這樣的特殊顏色。

您是否預測到我的代碼中存在其他問題?

玻璃渲染可能與C#庫使用的渲染不兼容。這很可能取決於您的C#代碼是否使用WinForms或WPF。事實上,您可能會發現C#開發人員會發現使用本機C#代碼更容易。我期望在常見的C#GUI框架中很好地支持玻璃渲染。

+0

謝謝噸,但我應該已經更具體與'我將如何包裝這個DLL在C#中? 。另外,不知道'p/invoke'的含義是什麼(我是C#dummy) –

+1

從該術語的websearch開始。然後在微小的dll上嘗試一下。然後在這裏提出具體問題。你也應該熟悉C#。您的編輯似乎在要求某人爲您編寫密碼代碼。我不會那樣做。也許別人會。最好的辦法是讓你嘗試自己,問問自己什麼時候卡住了。但請請從簡單的東西開始學習! –

+0

發現這篇文章非常有用:http://www.glennstephens.com.au/tech/CSharp4DelphiDevelopers.pdf –