์๋ ,
Windows x64์์ node.js x64๋ฅผ ์ฌ์ฉํ์ฌ edge.js์ .NET ์ฝ๋์์ ๊ธฐ๋ณธ 32๋นํธ dll์ ํธ์ถํ ์ ์์ต๋๊น?
์ฝ์ .NET ์์ฉ ํ๋ก๊ทธ๋จ์์ ์ด์ 32๋นํธ ๊ธฐ๋ณธ dll(DllImport ์ฌ์ฉ)์ ํธ์ถํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ edge.js์ ๋์ผํ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ฉด BadImageException์ด ๋ฐ์ํฉ๋๋ค. x86 .NET ์ด์ ๋ธ๋ฆฌ๋ฅผ ํธ์ถํ๋ ค๊ณ ํ๋ฉด ๋์ผํ ๊ฒฐ๊ณผ๊ฐ ๋ํ๋ฉ๋๋ค.
์ผ๋ถ ๋ ๊ฑฐ์ x86 ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ x86 node.js๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๊น?
๋ ๋ค๋ฅธ ์ง๋ฌธ, COM์ ์ด๋ป์ต๋๊น?
IIS ๋ ธ๋๋ x86 node.js๋ง ์ฌ์ฉํ๋ ๊ฒ์ ๋ณด์์ต๋๋ค. ๋ด ์ฑ์ x64์ ๋ํ ํน๋ณํ ์๊ตฌ ์ฌํญ์ ์์ต๋๋ค(๋ฌผ๋ก x64 ๋ฒ์ ์ x64 ์์คํ ์์ ๋ ์ข์ ๊ฒ์ ๋๋ค). ๊ทธ๋์ x86 ๋ฒ์ ์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒ ์๋๊ฐ์?
C(๋ค์ดํฐ๋ธ dll)๋ฅผ ํตํด ์ก์ธ์คํ ์ ์๋ ๊ฒฝ์ฐ ๋ ธ๋์ ํจ๊ป ์ฌ์ฉํ ๋ค์ดํฐ๋ธ ๋ชจ๋/ํจํค์ง๋ฅผ ๋น๋ํ๋ ๋ฐ ๊ด์ฌ์ด ์์ ์ ์์ต๋๋ค.
์ํธ ์์ฉ์ด ์ผ๋ง๋ ๋ณต์กํ๊ณ ํ์ดํ ์ ๋ ฅ/์ถ๋ ฅ์ ์ฌ์ฉํ๋ ๋ช ๋ น์ค exe๋ฅผ ํตํด ๋ ธ์ถ๋ ์ ์์ต๋๊น?
๋ ์ง์ ์ ์ผ ์ ์๋ ๋ช ๊ฐ์ง ๋์ ์๋ฃจ์ ์ ์ ๊ณตํฉ๋๋ค.
๋ต๋ณ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค
์ด๋ค ๊ฒฝ์ฐ์๋ native.dll์ ์ฌ์ฉํ๋ .NET ๋ ผ๋ฆฌ๊ฐ ์์ ๋ .NET์ ๋ชจ๋ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ๊ณ JavaScript์์ ํ ๋ฒ ํธ์ถํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ทธ๋ฌ๋ ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ๋ค์ดํฐ๋ธ dll์ ๋ ผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ผ๋ถ ๋ ผ๋ฆฌ๊ฐ ์๋ JavaScript ์ฝ๋๋ฅผ ๊ฐ์ง ์ ์์ ๋ JavaScript์์ ์ง์ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๋์ ๊ฒ์ ๋๋ค.
C#์์๋ ๋ค์๊ณผ ๊ฐ์ ์๋ช ์ ์ฌ์ฉํ์ฌ ๋ ๊ฐ์ ๊ธฐ๋ณธ ํจ์๋ฅผ ๊ฐ์ ธ์์ต๋๋ค.
[DllImport("library.dll")]
์ ์ extern int Func1(byte[] p1, ref int p2, byte[] p3, int p4);
dll-s https://github.com/rbranson/node-ffi ๋ฅผ ํธ์ถํ๊ธฐ ์ํ node.js ํจํค์ง๋ฅผ ์ฐพ์์ต๋๋ค
๊ทธ๋ฌ๋ ๋๋ ์์ง ๊ทธ๊ฒ์ ์๋ํ์ง ์์์ต๋๋ค. node-ffi๋ก ์ด๋ฐ ์ข
๋ฅ์ ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ด ์ผ๋ง๋ ์ด๋ ต์ต๋๊น?
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ด์ง ํ์ผ์ ๊ฐ์ ธ์จ ๋ค์ ๊ธฐ๋ณธ dll์ ์ผ๋ถ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋์ฝ๋ฉํ๊ณ ์ ํ์ ์ผ๋ก ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๊ณ ๊ฒฐ๊ตญ ๋ธ๋ผ์ฐ์ ์ ์ด์ง ์ถ๋ ฅ์ผ๋ก ๋ฐํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์๊ฐํ๊ณ ์์ต๋๋ค. BTW ๋๊ตฌ๋ ์ง node.js์์ ๋ฐ์ด๋๋ฆฌ ์ด๋ฏธ์ง๋ฅผ ์ฒ๋ฆฌํ๋ ์ข์ node.js ํจํค์ง๋ฅผ ์๊ณ ์์ต๋๊น?
+1 -- ์ง์ ์ด ์์๋์ง ๊ถ๊ธํฉ๋๋ค. ๋ด ํน์ ์ฌ์ฉ ์ฌ๋ก๋ ์ฐจ๋ก๋ก 32๋นํธ ๋ค์ดํฐ๋ธ C++ dll์ ์ฐธ์กฐํ๋ ํ์ฌ .NET ์ด์ ๋ธ๋ฆฌ๋ฅผ ํธ์ถํ๋ ค๋ ๊ฒ์ ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
+1 -- ์ง์ ์ด ์์๋์ง ๊ถ๊ธํฉ๋๋ค. ๋ด ํน์ ์ฌ์ฉ ์ฌ๋ก๋ ์ฐจ๋ก๋ก 32๋นํธ ๋ค์ดํฐ๋ธ C++ dll์ ์ฐธ์กฐํ๋ ํ์ฌ .NET ์ด์ ๋ธ๋ฆฌ๋ฅผ ํธ์ถํ๋ ค๋ ๊ฒ์ ๋๋ค.