今天在 bdn 中看到一篇文章
http://bdn.borland.com/article/0,1410,32765,00.html
重要的部分摘抄如下
Résumé exécutif
• Les espaces de noms n'affectent pas Delphi pour Win32.
• Les espaces de noms sont produits en fonction du nom de l'unité comme suit:
• Si un nom d'unité est pointillé, le nom de l'unité jusqu'au dernier point est utilisé.
• S'il n'est pas pointillé, l'espace de noms par défaut est utilisé.
• S'il n'y a pas d'espace de noms par défaut, le nom de l'unité est utilisé.
• Le code converti à partir de Delphi 8 peut nécessiter certaines modifications.
• Utilisez toujours des packages et non des bibliothèques pour créer des assemblages partageables.
• Delphi se référera toujours aux types par leur nom d'unité complet.
• D'autres langues devront se référer à des types à l'aide de leur espace de noms.
• Les déclarations ASP.NET, les fichiers de configuration et la réflexion .NET se réfèrent toujours aux types par leur espace de noms.
• Si plusieurs unités émettent un type public avec le même nom dans le même espace de noms, l'assemblage peut être inutilisable
Borland a toujours recommandé de ne pas utiliser de projets de bibliothèque pour créer des assemblages. Dans Delphi 2005, le compilateur est plus strict et ne vous permettra plus de compiler une application faisant référence à une «bibliothèque» Delphi.
Utilisez toujours un projet de package pour créer des assemblées .NET.
Cependant, comme pour tout, il y a des exceptions à la règle et il existe plusieurs situations où vous devez utiliser l'espace de noms même si vous codiez à Delphi.
Un exemple est lorsque vous utilisez des balises dans les fichiers ASPX, ASCX ou ASMX. Si vous créez une page Web appelée TwebForm dans le fichier application.pages.webform1.pas, alors la balise de page serait:
<% @ Page Language = "C #" CodeBehind = "webForm1.pas" Hérites = "Application.pages.twebForm1"%> |
Un autre est lors de la transmission des informations de type à .NET sous forme de chaînes, en particulier lors de l'utilisation d'API et de fichiers de configuration basés sur la réflexion:
var C: TypeConverter; C: = Assembly.CreateInstance ('Sample.Controls.tconverter'); |
Cette légère différence fait généralement taire les gens et est quelque chose dont vous devez faire attention, en particulier lors du portage du code de Delphi 8 ou de la conversion du code à partir d'autres langues.
这就解释了我原来的疑问 , 在 D2005 中 , 新建一个 .NET DLL , 编译 , 在别的编译器中 (C #) , 可以使用 , 但是在 Delphi 中自己却不能用 , 虽然用薄可以解决问题 虽然用薄可以解决问题但是包中添加资源很不方便 , 真是不知道 borland 是怎么想的。