返回首页

任何人一天的好时机!
虽然在大学学习面向对象编程中,我们得到了一个任务,需要创建DLL,使代码的某些部分完全执行负载,我的意思是在C像DllMain的东西。我想上网冲浪,但只找到意见,以创建静态构造函数,将初始化所有我们需要首先创建对象,但它不作为主要的要求是没有任何东西可以在原代码改写,只有线"使用DLLNAME"允许。所以现在的问题是:是否有任何可能使DLL的东西,正是它的负载到项目执行
?非常感谢您,希望有人会帮我。| AvelN

回答

评论会员:游客 时间:2012/02/06
...编辑删除我原来用那句"脑筋急转弯"的回应可能是负面的感...即使,我觉得这里提出的问题是一个"棘手"的问题,有没有明确的解决方案......至少不会在。NET中的WinForms,我觉得不得不澄清我的目标是避免任何不必要的混乱较早评论,可能,清理走1形而上学的烟奇怪的云,已经物化在这里,也许吸烟1古瑜伽士的篝火医生的不二论吠檀多的"洗鼻洗鼻的学校,在该Avadhuta吉塔{S0}拥护虽然这是事实,因为MSDN说:"用户没有控制静态构造函数在程序执行时,"你,程序员,可以强制一个静态类的构造被称为。例如,假设我创建了一个NET项目类型为"类库",其中有一个静态类:codeprelang="cs"spanclass="code-keyword"using/spanSystem; spanclass="code-keyword"namespace/spanAStaticClassExperiment{spanclass="code-keyword"public/spanspanclass="code-keyword"class/spanStaticClass{spanclass="code-comment"///spanspanclass="code-comment"thestaticconstructor/spanspanclass="code-keyword"static/spanStaticClass(){Console.WriteLine(spanclass="code-string""/spanspanclass="code-string"myField="/span+myField);} spanclass="code-comment"///spanspanclass="code-comment"apublicstaticPropertyoftypestring/spanspanclass="code-keyword"public/spanspanclass="code-keyword"static/spanspanclass="code-keyword"string/spanmyField{spanclass="code-keyword"get/span;spanclass="code-keyword"set/span;}}}/pre/code现在我编译成DLL。和,然后,我创建了一个新的NETWinForm的项目中,我添加一个引用到该DLL:codeprespanclass="code-keyword"using/spanAStaticClassExperiment;/pre/codecodepreAStaticClassExperiment.StaticClass.myField=spanclass="code-string""/spanspanclass="code-string"HellofromtheDLL."/span;/pre/code访问领域的行为,如果在这个新的WinForm项目中的代码,我执行这样的代码:静态类,保证类的静态构造函数将被调用,您可以验证通过检查输出窗口。一个单一的静态类可以构成一个DLL的全部内容:!所以,当一个静态类的WinForms项目中引用之前,它的某些部分使用/引用:在哪里呢?是什么呢?嗯,你可能会认为它作为一个未使用的模板"或"蓝图",或"to-do列表:",一旦"拿起"可能引发一些行为和改变自己的内部状态{BR}希望这有助于
SAKryukov
评论会员:游客 时间:2012/02/06
NET允许你需要什么,我不认为,我觉得这是一个很好的理由!。[编辑]我宁愿说,它似乎只给你,你需要它,但事实上,使用。NET,你并不需要这样的事情。[完编辑]从本质上讲,。NET中有没有为DLL这样的事情。您可以创建他们,但DLL的概念是没有意义的。相反的,有意义的实体组件和组件的可执行模块(很多人不知道其中的差别,只是因为VS允许每个组件只有一个可执行模块的创建,但原始的C#编译器允许非组件创建单独的可执行模块)。DLL是一个可能的扩展,不进行任何特殊的意义集会。特别是,那里是没有的DLL和EXE之间不同的差异(它的入口点,但该是它);和的EXE文件(入口点)也可以作为普通类库组件mdash引用或在运行期间加载NET的过程。一段时间。这种模块化设计思想的转变,它看起来自然,可执行模块之间的界限变得更加透明。在开发过程中,开发人员并不真正感受到发展,IntelliSense和调试不同的组件把代码部分之间的边界。集加载的时刻,特别是透明的(不包括装载在运行时使用反射大会的情况下)。[编辑]作为条例草案"正确的答案由曼弗雷德在他的评论指出,"用户没有静态构造函数在程序执行时的控制。"[完编辑]另一个重要因素是JIT(编译时间)。NET中使用。从本质上讲,没有什么,甚至编译为本机代码,直到它需要被首次使用。这一重要因素,呈现装上的执行作出没有意义的。,特别是静态构造不叫在装载组件的时刻,并没有立即之后。他们被称为一类是要在应用领域的第一次使用时。此事件的确切时刻是不确定的。它只能保证一个构造被称为前级使用。mdash;的SA
曼弗雷德河Bihy
评论会员:游客 时间:2012/02/06
[更新]作为条例草案"及"SA指出,我的解决方案不完全是任择议定书layed完整的问题。我的解决方案只涉及OP在他的最后一个问题声明的要求。[/更新]据我所知是一类被加载时初始化静态字段。所以,你可以通过调用静态方法初始化一个私有静态字段。我还没有试过,但我认为它应该工作。的问候,如MRB
阿米尔Mahfoozi:如果你写在代码中使用DLLNAME,它是早期绑定的DLL和您的应用程序的onload发生后,所有DLL加载

如果你需要后期绑定的DLL加载DLL需要更多的控制,所以阅读:

还是这一句:
{A} 如果你坚持"使用DLL",并知道何时DLL加载,因为我知道它是唯一的调试API,当加载一个外部进程或附加到另一个正在运行的进程,这是不是你这里提到的可能。