<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>http://www.sdmemo.com/w/index.php?action=history&amp;feed=atom&amp;title=%E3%82%A2%E3%83%B3%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8B%E3%82%89%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%97</id>
	<title>アンマネージコードからマネージコードの呼び出し - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="http://www.sdmemo.com/w/index.php?action=history&amp;feed=atom&amp;title=%E3%82%A2%E3%83%B3%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8B%E3%82%89%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%97"/>
	<link rel="alternate" type="text/html" href="http://www.sdmemo.com/w/index.php?title=%E3%82%A2%E3%83%B3%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8B%E3%82%89%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%97&amp;action=history"/>
	<updated>2026-04-21T22:23:13Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>http://www.sdmemo.com/w/index.php?title=%E3%82%A2%E3%83%B3%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8B%E3%82%89%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%97&amp;diff=149&amp;oldid=prev</id>
		<title>Admin: ページの作成: Category:その他  アンマネージコードからマネージコードの呼び出し例を以下に示します。  環境 * 言語 : Visual C++ 2008 SP1 * OS : Windows …</title>
		<link rel="alternate" type="text/html" href="http://www.sdmemo.com/w/index.php?title=%E3%82%A2%E3%83%B3%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8B%E3%82%89%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%97&amp;diff=149&amp;oldid=prev"/>
		<updated>2010-07-11T16:56:51Z</updated>

		<summary type="html">&lt;p&gt;ページの作成: &lt;a href=&quot;/wiki/%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA:%E3%81%9D%E3%81%AE%E4%BB%96&quot; title=&quot;カテゴリ:その他&quot;&gt;Category:その他&lt;/a&gt;  アンマネージコードからマネージコードの呼び出し例を以下に示します。  環境 * 言語 : Visual C++ 2008 SP1 * OS : Windows …&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:その他]]&lt;br /&gt;
&lt;br /&gt;
アンマネージコードからマネージコードの呼び出し例を以下に示します。&lt;br /&gt;
&lt;br /&gt;
環境&lt;br /&gt;
* 言語 : Visual C++ 2008 SP1&lt;br /&gt;
* OS : Windows 7 Ultimate 64bit&lt;br /&gt;
&lt;br /&gt;
== コード ==&lt;br /&gt;
&lt;br /&gt;
DelegateTest.cpp&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;stdafx.h&amp;quot;&lt;br /&gt;
#include &amp;quot;ManagedClass.h&amp;quot;&lt;br /&gt;
#include &amp;quot;UnManagedClass.h&amp;quot; &lt;br /&gt;
&lt;br /&gt;
using namespace System;&lt;br /&gt;
&lt;br /&gt;
int main(array&amp;lt;System::String ^&amp;gt; ^args)&lt;br /&gt;
{&lt;br /&gt;
	ManagedClass^ m = gcnew ManagedClass();&lt;br /&gt;
	int pointer = m-&amp;gt;GetDelegetePointer();&lt;br /&gt;
&lt;br /&gt;
	UnManagedClass *um = new UnManagedClass();&lt;br /&gt;
	um-&amp;gt;CallMethod(pointer);&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ManagedClass.h&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#pragma once&lt;br /&gt;
&lt;br /&gt;
ref class Writer&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
	void Write()&lt;br /&gt;
	{&lt;br /&gt;
		System::Console::WriteLine(&amp;quot;called from managed class.&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
ref class ManagedClass&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
&lt;br /&gt;
	delegate void CallDelegate();&lt;br /&gt;
&lt;br /&gt;
	ManagedClass(void)&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	int GetDelegetePointer()&lt;br /&gt;
	{&lt;br /&gt;
		// CallDelegate^ del = gcnew CallDelegate(Output); // このような書き方もできる&lt;br /&gt;
		Writer^ w = gcnew Writer();&lt;br /&gt;
		CallDelegate^ del = gcnew CallDelegate(w, &amp;amp;Writer::Write);&lt;br /&gt;
		System::IntPtr p1 = System::Runtime::InteropServices::Marshal::GetFunctionPointerForDelegate(del);&lt;br /&gt;
		return p1.ToInt32();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	static void Output()&lt;br /&gt;
	{&lt;br /&gt;
		System::Console::WriteLine(&amp;quot;called from managed class.&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UnManagedClass.h&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#pragma once&lt;br /&gt;
&lt;br /&gt;
class UnManagedClass&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
&lt;br /&gt;
	UnManagedClass(void)&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	~UnManagedClass(void)&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	void CallMethod(int pointer)&lt;br /&gt;
	{		&lt;br /&gt;
		// 関数ポインタ取得&lt;br /&gt;
		void (*func)() = (void(__cdecl *)(void))pointer;&lt;br /&gt;
		// 関数実行&lt;br /&gt;
		func();&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 実行例 ==&lt;br /&gt;
&lt;br /&gt;
コンソール画面に「called from managed class.」と表示されます。&lt;br /&gt;
&lt;br /&gt;
== 更新履歴 ==&lt;br /&gt;
&lt;br /&gt;
*ページ作成 -- 2010年7月11日 (日) 16:56 (UTC)&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>